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.