[SQL] MySQL의 1,062 - 키에 대한 중복 항목을 '0' 'PRIMARY'
SQLMySQL의 1,062 - 키에 대한 중복 항목을 '0' 'PRIMARY'
나는 MySQL 버전 5.5.24에 다음과 같은 테이블이
DROP TABLE IF EXISTS `momento_distribution`;
CREATE TABLE IF NOT EXISTS `momento_distribution`
(
`momento_id` INT(11) NOT NULL,
`momento_idmember` INT(11) NOT NULL,
`created_at` DATETIME DEFAULT NULL,
`updated_at` DATETIME DEFAULT NULL,
`unread` TINYINT(1) DEFAULT '1',
`accepted` VARCHAR(10) NOT NULL DEFAULT 'pending',
`ext_member` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`momento_id`, `momento_idmember`),
KEY `momento_distribution_FI_2` (`momento_idmember`),
KEY `accepted` (`accepted`, `ext_member`)
)
ENGINE=InnoDB
DEFAULT CHARSET=latin1;
그것은 ondelete = 두 개의 다른 테이블과 다 대일 관계와 많은 데이터와의 OnUpdate = 제한하는 제한이있다.
여전히 기존의 관계와 데이터를 유지하면서 지금, 나는, 구조를 변경해야하고 테이블에서 별도의 기본 키를 소개합니다. 이를 위해, 나는 다음과 같은 쿼리를 실행 :
ALTER TABLE `momento_distribution` ADD `id` INT( 11 ) NOT NULL FIRST;
ALTER TABLE `momento_distribution` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` );
불행하게도, 내 두 번째 쿼리는 다음과 같은 오류로 실패했습니다 :
누군가가 문제가 밖으로 점을 기쁘게 할 수 있습니까? 나는 문제가 기존의 관계라고 생각,하지만 난 수천 개의 행이 기존 관계 또는 데이터를 잃고 싶지 않아. 데이터의 손실없이이 작업을 수행 할 수있는 방법이 있습니까?
편집하다: 데이터를 보면, I는 새롭게 생성 된 열이있는 값 '0'을 갖는 것을 얻었다. 아마이 (새 기본 키)로 인해 중복 레코드에 기본 키를 변경 허용하지 않습니다
내가 수동으로 변경할 수 없습니다, 그래서 나는 8,000 개 이상의 행이. 새로운 기본 키에 할당 ROWID 수있는 방법이 있습니까?
해결법
-
==============================
1.MySQL의 콘솔에서 다음 쿼리를 실행합니다 :
MySQL의 콘솔에서 다음 쿼리를 실행합니다 :
SHOW CREATE TABLE momento_distribution
같은 형태의 라인을 확인
CONSTRAINT `momento_distribution_FK_1` FOREIGN KEY (`momento_id`) REFERENCES `momento` (`id`)
내가 그냥 할 수 있는지에 관한 추측을 넣어 다를 수 있습니다. 당신이 외래 키가있는 경우 모두 'momento_id'& 'momento_idmember', 두 개의 외래 키 이름을 얻을 것이다. 다음 단계는 외래 키를 삭제하는 것입니다. 다음 쿼리를 실행합니다 :
ALTER TABLE momento_distribution DROP FOREIGN KEY momento_distribution_FK_1 ALTER TABLE momento_distribution DROP FOREIGN KEY momento_distribution_FK_2
(가) TABLE 쿼리를 만드는에서 당신이 가지고 무엇을 외래 키 이름을 변경해야합니다. 쉽게 기본 키를 제거 할 수 있도록 지금 당신은 어떤 외래 키가 없습니다. 다음을 시도해보십시오
ALTER TABLE `momento_distribution` DROP PRIMARY KEY
다음과 같이 필요한 열을 추가 :
ALTER TABLE `momento_distribution` ADD `id` INT( 11 ) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST
당신이 @rowid에 의존 할 필요가 없습니다 그래서이 쿼리는 또한 번호를 추가합니다. 이제 이전 컬럼에 외래 키 등을 추가해야합니다. 이를 위해 먼저 다음 인덱스를 만들 :
ALTER TABLE `momento_distribution` ADD INDEX ( `momento_id` ) ALTER TABLE `momento_distribution` ADD INDEX ( `momento_idmember` )
이제 외부 키를 추가합니다. 당신이 필요로 참조 표 / 열을 변경 :
ALTER TABLE `momento_distribution` ADD FOREIGN KEY ( `momento_id`) REFERENCES `momento` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT ALTER TABLE `momento_distribution` ADD FOREIGN KEY ( `momento_idmember`) REFERENCES `member` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
희망이 도움이. 만약 에러가 난다면, 참조 테이블 & 당신이지고있는 오류 코드 (들)의 구조하시기 바랍니다 편집 질문.
-
==============================
2.당신은 자동 증가 등의 기본 키를 지정해야
당신은 자동 증가 등의 기본 키를 지정해야
CREATE TABLE `momento_distribution` ( `momento_id` INT(11) NOT NULL AUTO_INCREMENT, `momento_idmember` INT(11) NOT NULL, `created_at` DATETIME DEFAULT NULL, `updated_at` DATETIME DEFAULT NULL, `unread` TINYINT(1) DEFAULT '1', `accepted` VARCHAR(10) NOT NULL DEFAULT 'pending', `ext_member` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`momento_id`, `momento_idmember`), KEY `momento_distribution_FI_2` (`momento_idmember`), KEY `accepted` (`accepted`, `ext_member`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1$$
방법에 대한 아래의 의견을 감사로 :
ALTER TABLE `momento_distribution` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT, DROP PRIMARY KEY, ADD PRIMARY KEY (`id`);
기본 키는 중복을 포함 그렇다면 당신은 모두 새 열을 만들어야 할 수 있도록, 당신이, 고유 인덱스로 열을 할당 할 수 없습니다, 고유 인덱스
-
==============================
3.기본 키와 필드가 자동 증가로 설정되어 있는지 확인
기본 키와 필드가 자동 증가로 설정되어 있는지 확인
-
==============================
4.완벽하게 나를 위해이 단계의 작업 .. 당신이 그것을 시도 할 수 있습니다
완벽하게 나를 위해이 단계의 작업 .. 당신이 그것을 시도 할 수 있습니다
너무 당신을 위해 일하겠습니다. 행운을 빕니다
-
==============================
5.AUTO_INCREMENT 같은 PRIMARY KEY를 설정합니다.
AUTO_INCREMENT 같은 PRIMARY KEY를 설정합니다.
-
==============================
6.나를 위해, 나는 ID없이 데이터 내 기본 필드에 삽입 AUTO INCREMENT을 추가하는 것을 잊지.
나를 위해, 나는 ID없이 데이터 내 기본 필드에 삽입 AUTO INCREMENT을 추가하는 것을 잊지.
-
==============================
7.PRIMARY KEY로 설정 AUTO INCREMENT
PRIMARY KEY로 설정 AUTO INCREMENT
from https://stackoverflow.com/questions/12179770/mysql-1062-duplicate-entry-0-for-key-primary by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 점검 제한 조건은 다른 테이블에 관련된 수 있습니까? (0) | 2020.04.11 |
---|---|
[SQL] 더 '에 의한 주문'이 지정되지 않은 경우, 어떤 순서로 쿼리는 레코드 집합에 대한 선택 하는가? (0) | 2020.04.11 |
[SQL] 큰 테이블에 오프셋 최적화 쿼리 (0) | 2020.04.11 |
[SQL] 내가 모델 첫 번째 방법에서 날짜로 설정 SQL 유형의 구조 주석을 어떻게 사용합니까 (0) | 2020.04.11 |
[SQL] 시퀀스 만 행을 SQL 기 (0) | 2020.04.11 |