MySQL의 중복 키 제약 조건 위반: 오류 1022
MySQL Workbench가 테이블을 생성하기 위해 다음 SQL 코드를 생성했습니다.
<code class="sql">CREATE TABLE IF NOT EXISTS `mydb`.`errors_reports` ( `error_id` INT NOT NULL , `report_short` VARCHAR(15) NOT NULL , PRIMARY KEY (`error_id`, `report_short`) , INDEX `error_id_idx` (`error_id` ASC) , INDEX `report_short_idx` (`report_short` ASC) , CONSTRAINT `error_id` FOREIGN KEY (`error_id` ) REFERENCES `mydb`.`errors` (`error_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `report_short` FOREIGN KEY (`report_short` ) REFERENCES `mydb`.`reports` (`report_short` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB</code>
실행 시 이 쿼리는 다음 오류와 함께 실패합니다.
<code class="sql">ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports'</code>
Analytic
처음에는 기본 키 정의가 유효한 것처럼 보였습니다. 하나의 기본 키가 정의되었습니다. 그러나 문제는 외래 키 제약 조건 이름(error_id 및 report_short)에 있습니다.
해결
MySQL은 외래 키 제약 조건을 허용하지 않습니다. 전체 데이터베이스 내에서 동일한 이름을 갖습니다. 오류_reports 테이블에는 다른 테이블을 참조하는 두 개의 외래 키 제약 조건이 있으므로 해당 제약 조건 이름이 고유한지 확인해야 합니다.
오류를 해결하려면 외래 키 제약 조건 중 하나 또는 둘 다의 이름을 바꾸세요. 예를 들어 "error_id" 대신 "error_id_ref"로 이름을 지정할 수 있습니다.
예
<code class="sql">CONSTRAINT `error_id_ref` FOREIGN KEY (`error_id` ) REFERENCES `mydb`.`errors` (`error_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `report_short_ref` FOREIGN KEY (`report_short` ) REFERENCES `mydb`.`reports` (`report_short` ) ON DELETE NO ACTION ON UPDATE NO ACTION)</code>
요약
중복 키와 관련된 MySQL 오류 1022가 발생하면 기본 키 정의뿐만 아니라 외래 키 제약 조건의 이름도 확인하는 것이 중요합니다. 이러한 제약 조건에 고유한 이름이 있는지 확인하면 오류 발생을 방지할 수 있습니다.
위 내용은 MySQL에서 \'중복 키 제약 조건 위반\' 오류(오류 1022)가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!