实际上,外键强制执行引用完整性,帮助我们自动维护数据的一致性和完整性。可以用“customer”和“orders”两个表的例子来理解。这里,“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)
现在,假设我们尝试在“orders”表中插入一个不存在的客户的值(id 10 不存在于“customer”表中),那么 mysql 会由于以下错误而抛出错误:外键约束。
mysql> insert into orders values(400, 'notebook',10);error 1452 (23000): cannot add or update a child row: a foreign key constraint fails (`query`.`orders`, constraint `orders_ibfk_1` foreign key (`id`) references `customer` (`id`))
以上就是当两个表用 mysql foreign key 连接时,怎么能说子表中的数据保持了完整性呢?的详细内容。