由于错误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)
1条答案
按热度按时间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
在中找不到unitid
列unit
table。mysql不允许插入,因为该行将违反指定的约束。
这就是“发生了什么”。
如果要将行添加到
lecturers
表中,为unitid
列。。。如果提供的值
'42'
在中的一行中找到unit
table。也就是说,这个查询将返回至少一行(通常,只有一行)。。。