SQL外键约束如何添加 外键约束添加的4个步骤

嘿,外键真的很烦人。

举个例子,你想想,2 02 2 年我还是在上海吧?该公司正在开发新系统,在数据库中途发现用户表和订单表不匹配。

users表称为users。
它包含一个标识符,即主键。

订单表,称为orders,包含一个user_id,它应该指向用户表ID。

首先您需要确定谁是父母,谁是孩子。
users 是父表,orders 是子表。
非常清楚。
每个命令必须有一个用户。

然后检查orders表中的user_id字段,它是外键,它必须与users表的id关联。

接下来,编写SQL语句。
那一刻我的手颤抖着,我写下了命令 ALTERTABLE ADD CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id);这个东西应该可以在 MySQL Workbench 中工作。

执行完成后,数据库显示“OK”,外键约束生效。
此时,您正尝试将 user_id 插入订单表中。
如果users表中没有这个人,数据库会直接报错给我,不允许插入。

这就是数据完整性,可以避免“孤立数据”,非常有用。

此外,还可以进行级联操作。
例如,ALTERTABLE order ADD CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE;这样,如果您更新 users 表中的 id,orders 表中的用户 id 也会自动更新。
如果删除users表中的某个用户,则orders表中指向该用户的所有订单的user_id都将变为NULL,或者直接删除,具体取决于您如何定义。

但这东西也有缺陷。
当插入、更新或删除时,数据库必须额外检查外键约束,这有时会慢一些。
尤其是ON DELETE CASCADE,如果不小心删除了不该删除的用户,很多命令可能会被删除,这就很麻烦了。

所以,在设计数据库的时候,需要仔细思考。
外键确实可以保证数据的一致性,但也必须考虑性能问题。
有时可能需要更改方法,例如通过在应用程序层执行检查,或者通过创建触发器或其他方式。

无论哪种方式,如果外键使用正确,数据就应该标准化。
如果使用不当,它可能会成为性能瓶颈。

sql中foreign key的用途 外键约束的实战应用与注意事项

SQL中外键的目的:确保数据完整性并维护表之间的关系。

外键约束的实际实现:连接customers和order表,检查orders表是否是customers表customer_id的customer_id。
注意事项:
数据类型匹配 父表通过引用主键或唯一键而存在。

父表数据存在,子表引用值存在
去除更新和删除:
CASCDE:如果父表发生变化,子表也会跟随变化。

SETNULL:父表改变,子表的引用列设置为NULL。

限制:父表更改,防止子表引用行更改
性能影响及优化: 外键列索引
批量工作
禁用外键限制(警告)
应用层数据认证
循环外键依赖:
延迟限制检查。

先创建表结构然后添加外键
引入中间表
避免使用外键约束:
性能瓶颈
数据关系很复杂。
非关系数据库

如何在MySQL中实现外键约束?外键的创建与管理完整教程!

记得有一次,我在一个电商项目中负责数据库的设计。
此时,为了保证订单和用户之间的数据一致性,我决定为订单表添加外键约束,指向用户表的主键。
我选择在创建表的时候直接定义外键,因为这样可以从一开始就保证表结构的完整性。
当时我写了一个简单的SQL语句:
sql 创建表订单( order_id INT 主键自动递增, 用户 ID INT, 订单日期日期, CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE );
在这段代码中,fk_user_id是我自定义的外键名称,user_id是子表中的外键列,users(user_id)是指父表中的主键列。
我还设置了一个普遍操作,以确保当删除用户时,相关订单也会被删除。

这个过程让我认识到外键约束不仅仅是简单的数据关联,它还可以帮助我们维护数据的一致性和完整性。
当然,在实际操作中,我也遇到了一些小问题。
例如,有一次,由于外键限制,数据插入失败。
通过检查错误信息和表结构,找到了问题原因。

但是现在回想起来,虽然这个过程有点绕,但是也让我对数据库设计有了更深入的了解。
等等,我突然想到,如果外键约束设置不正确,会不会影响数据库性能?