从父表中删除该行时,如果在子表中使用该行的数据,则由于FOREIGN KEY约束失败,MySQL将引发错误。用两个名为“ customer”和“ orders”的表的示例可以理解。在这里,“客户”是父表,“订单”是子表。我们无法从“客户”表中删除子表“订单”中使用的行。可以通过如下删除父表中的值来证明这一点:
mysql> Select * from Customer; +----+--------+ | id | name | +----+--------+ | 1 | Gaurav | | 2 | Raman | | 3 | Harshit| | 4 | Aarav | +----+--------+ 4 rows in set (0.00 sec) mysql> Select * from orders; +----------+----------+------+ | order_id | product | id | +----------+----------+------+ | 100 | Notebook | 1 | | 110 | Pen | 1 | | 120 | Book | 2 | | 130 | Charts | 2 | +----------+----------+------+ 4 rows in set (0.00 sec)
现在,假设如果我们尝试从父表“ customer”中删除id = 1或id = 2的行(由于在子表中使用了两行),那么MySQL将由于外部错误而引发如下错误关键约束。
mysql> Delete from customer where id = 1; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`query`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`)REFERENCES `customer` (`id`)) mysql> Delete from customer where id = 2; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`query`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`)REFERENCES `customer` (`id`))