Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lỗi MySQL 1452 - Không thể thêm/cập nhật hàng con: ràng buộc khóa ngoại thất bại

Lỗi ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails xảy ra khi chèn bản ghi vào bảng con (child) mà giá trị khóa ngoại không tồn tại trong bảng cha (parent).

Minh họa

Tạo 2 bảng và khóa ngoại:

CREATE TABLE ForeignTable (id INT, name VARCHAR(200), Fk_pk INT);
CREATE TABLE primaryTable1 (Fk_pk INT, DeptName VARCHAR(200), PRIMARY KEY(Fk_pk));
ALTER TABLE ForeignTable ADD CONSTRAINT constFKPK FOREIGN KEY (Fk_pk) REFERENCES primaryTable1(Fk_pk);

Chèn vào bảng con trước khi có dữ liệu trong bảng cha:

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`))

Khắc phục

Chèn dữ liệu vào bảng cha trước:

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

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

Kiểm tra:

mysql> SELECT * FROM ForeignTable;
+------+------+-------+
| id   | name | Fk_pk |
+------+------+-------+
| 1    | John | 1     |
+------+------+-------+

mysql> SELECT * FROM primarytable1;
+-------+-----------------+
| Fk_pk | DeptName        |
+-------+-----------------+
| 1     | ComputerScience |
+-------+-----------------+

Quy tắc: Luôn chèn dữ liệu vào bảng cha (parent) trước, bảng con (child) sau để tránh lỗi 1452.