programing

외부 키(MySQL) 추가 방법

css3 2023. 10. 7. 12:05

외부 키(MySQL) 추가 방법

저는 SQL을 아주 처음 접해서 간단한 ALTER TABLE을 수행하여 새 열을 만들고 이를 외부 키로 사용하여 데이터베이스의 다른 간단한 테이블을 참조하려고 합니다.두 테이블 모두 InnoDB로 변경했습니다.

하지만 ALTER TABLE 코드를 실행할 때 다음과 같은 오류가 발생합니다.

Error   1452    Cannot add or update a child row: 
a foreign key constraint fails (`toys`.<result 2 when 
explaining filename '#sql-6d4_6'>, CONSTRAINT 
`#sql-6d4_6_ibfk_1` FOREIGN KEY (`toy_id`) REFERENCES `toys` (`toy_id`))    

다음은 두 표의 DESC입니다.

표 1:

FIELD       TYPE     NULL   KEY     EXTRA
toy_id      int(11)  NO     PRI     auto_increment
toy varchar(50) YES         

표 2:

FIELD       TYPE        NULL   KEY     EXTRA
boy_id      int(11)     NO     PRI      auto_increment
boy         varchar(50) YES 

이것이 제가 수행하려던 ALTER 쿼리입니다.

    ALTER TABLE boys
    ADD COLUMN toy_id INT NOT NULL,
    ADD CONSTRAINT toys_toy_id_fk
    FOREIGN KEY(toy_id)
    REFERENCES toys(toy_id);

나는 그것을 알아내려고 사방을 둘러봤지만, 운이 없었습니다.미리 고마워요, 그리고 이 신입에게 친절하게 대해주세요 :)

편집:

다음은 두 테이블에 대한 SHOW CREATE TABLE입니다.

표 1:

    CREATE TABLE `toys` (
      `toy_id` int(11) NOT NULL AUTO_INCREMENT,
      `toy` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`toy_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

표 2:

    CREATE TABLE `boys` (
      `boy_id` int(11) NOT NULL AUTO_INCREMENT,
      `boy` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`boy_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

NOT NULL 열은 상위 테이블의 값과 일치하는 값으로 제한되지만 DEFAULT가 없는 새 비채움 열이므로 NULL 값만 가질 경우 행이 0보다 많은 테이블에 NOT NULL 열을 추가할 수 없습니다.

해결 방법은 단계적으로 수행하는 것입니다. 열을 추가하되 NOT NULL로 선언하지 말고, 아직 외래 키를 선언하지 마십시오.

ALTER TABLE boys
 ADD COLUMN toy_id INT;

그런 다음 장난감 표의 값과 일치하는 유효한 데이터로 채웁니다.

UPDATE boys SET toy_id = ...;

그런 다음 열을 NOT NULL로 변경하고 제약 조건을 만듭니다.

ALTER TABLE boys MODIFY COLUMN toy_id INT NOT NULL,
 ADD CONSTRAINT toys_toy_id_fk
 FOREIGN KEY(toy_id)
 REFERENCES toys(toy_id);

언급URL : https://stackoverflow.com/questions/15349382/how-to-add-foreign-key-mysql