Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

MySQL 오류 1452 - 하위 행을 추가할 수 없음:외래 키 제약 조건이 실패함

<시간/>

오류 1452를 이해하려면 먼저 테이블을 만들고 외래 키 제약 조건을 사용하여 테이블을 다른 테이블과 연결해야 합니다.

첫 번째 테이블 만들기 -

mysql> CREATE table ForeignTable
-> (
-> id int,
-> name varchar(200),
-> Fk_pk int
-> );
Query OK, 0 rows affected (0.43 sec)

첫 번째 테이블을 성공적으로 생성한 후 두 번째 테이블을 생성합니다 -

mysql> CREATE table primaryTable1
-> (
-> Fk_pk int,
-> DeptName varchar(200),
-> Primary key(Fk_pk)
-> );
Query OK, 0 rows affected (0.48 sec)

이제 두 테이블을 모두 만들었습니다. 그런 다음 두 테이블 모두 altercommand의 도움과 외래 키 제약 조건 추가와 관련이 있습니다. 구문은 다음과 같습니다 -

alter table yourFirstTable add constraint anyConstraintName foreign key(column_name which is
acts foreign key in second table) yourSecondTable(column_name which acts primary key in
second table).

이제 위의 쿼리를 사용하여 두 테이블을 연결합니다. 이것은 다음과 같이 주어집니다 -

mysql> alter table ForeignTable add constraint constFKPK foreign key(Fk_pk) references
primaryTable1(Fk_pk);
Query OK, 0 rows affected (1.57 sec)
Records: 0 Duplicates: 0 Warnings: 0

이제 두 테이블이 모두 관련되어 있습니다. 레코드는 다음과 같이 'foreignTable' 테이블에 삽입됩니다. -

mysql> INSERT into ForeignTable values(1,'John',1);

이로 인해 아래 출력에 표시된 오류가 발생합니다. -

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
(`business`.`foreigntable`, CONSTRAINT `constFKPK` FOREIGN KEY (`Fk_pk`)
REFERENCES `primarytable1` (`fk_pk`))

위의 출력에서 ​​'Cannot add or update child row:foreign keyconstraint failed' 오류가 발생합니다. 아래와 같이 primaryTable1 테이블에 레코드를 삽입하여 이 오류를 제거할 수 있습니다. -

mysql> INSERT into primaryTable1 values(1,'ComputerScience');
Query OK, 1 row affected (0.14 sec)

테이블 primaryTable1에 레코드를 삽입한 후 오류 없이 필요한 레코드를 ForeignTable 테이블에 삽입할 수 있습니다. 이것은 아래에 표시됩니다 -

mysql> INSERT into ForeignTable values(1,'John',1);
Query OK, 1 row affected (0.13 sec)

이제 다음과 같이 select 명령을 사용하여 ForeignTable의 테이블 레코드를 표시할 수 있습니다.

mysql> SELECT * from ForeignTable;

위 쿼리의 출력은 -

입니다.
+------+------+-------+
| id   | name | Fk_pk |
+------+------+-------+
| 1    | John | 1     |
+------+------+-------+
1 row in set (0.00 sec)

다음과 같이 select 명령을 사용하여 primarytable1의 테이블 레코드를 표시할 수도 있습니다.

mysql> SELECT * from primarytable1;

위 쿼리의 출력은 -

입니다.
+-------+-----------------+
| Fk_pk | DeptName        |
+-------+-----------------+
| 1     | ComputerScience |
+-------+-----------------+
1 row in set (0.00 sec)

오류 1452 - 자식 행을 추가하거나 업데이트할 수 없습니다. 데이터 레코드가 ForeignTable에 처음 삽입될 때 외래 키 제약 조건이 실패합니다.

Note: First, add the record into the second table i.e primarytable1 to avoid the above error.