>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 \'중복 키 제약 조건 위반\' 오류(오류 1022)가 발생하는 이유는 무엇입니까?

MySQL에서 \'중복 키 제약 조건 위반\' 오류(오류 1022)가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 16:54:03413검색

Why am I getting a

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.