由于违反外键约束,无法将数据添加到mysql表

bf1o4zei  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(350)

由于错误1452(23000),无法将数据添加到表中。这个问题怎么解决?

mysql> insert into lecturers (lecid, fname, lname) values (600, 'Brandon', 'Jenkins');

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`handin`.`lecturers`, CONSTRAINT `lecturers_ibfk_1` FOREIGN KEY (`unitid`) REFERENCES `unit` (`unitid`))

| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| lecid  | int(11)     | NO   | PRI | NULL    |       |
| fname  | varchar(35) | NO   |     | NULL    |       |
| lname  | varchar(35) | NO   |     | NULL    |       |
| unitid | int(11)     | NO   | MUL | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
jxct1oxe

jxct1oxe1#

外键约束是强制“引用完整性”。与notnull约束一起,外键约束告诉数据库 lecturers 表必须引用 unit table。
错误消息指出,如果insert语句要添加行,则添加的行将违反该约束。不允许插入,因为要添加的行将违反约束。
我们看到insert语句没有为 unitid 列。
mysql将为 unitid 列-或-有一个 BEFORE INSERT 为其赋值的触发器。
我们看到 unitid 列声明为 NOT NULL 所以我们知道 NULL 未分配值(如果一个null被赋值,我们就违反了notnull约束,我们会得到一个不同的错误消息。)
外键约束基本上是告诉数据库。。。在中添加或更新行时 lecturers ,去看看 unit 并验证我们分配给 unitid 列存在于 unit table。
错误消息告诉我们检查失败。我们试图分配给 unitid 中的列 lecturers 在中找不到 unitidunit table。
mysql不允许插入,因为该行将违反指定的约束。
这就是“发生了什么”。
如果要将行添加到 lecturers 表中,为 unitid 列。。。

INSERT INTO lecturers (..., unitid) VALUES (...,'42')
 --                          ^^^^^^              ^^^^

如果提供的值 '42' 在中的一行中找到 unit table。也就是说,这个查询将返回至少一行(通常,只有一行)。。。

SELECT unitid FROM unit WHERE unitid = '42'

相关问题