mysql创建表外键约束怎么写

上周 那是我的朋友 在 MySQL 中创建外键约束。

首先创建两个表。
创建parent_table表。
广场 创建表父表( ID INT 不为空; NAME VARCHAR(2 5 5 ) 不为空; 主键(id) );
创建子表。
广场 表创建子表( ID INT 不为空; Parent_id INT NOT NULL; 值 VARCHAR(2 5 5 ) 不为空; 主键(ID); 外键(parent_id)引用parent_table(id) );
然后将外键添加到child_table。
广场 更改表子表 添加外键(parent_id)引用parent_table(id);
删除级联 关于更新限制 这些函数是可以定义的。
广场 更改表子表 外键(parent_id)引用parent_table(id)添加 注销 带更新约束;
CASCDE表示当父表的数据被删除时,子表的数据也被删除。
RESTRICT表示父表数据更新时子表数据不移动。

注意数据类型必须一致。
空值也必须匹配。
如果父表列发生更改,则外键约束也必须更改。

我不确定这部分。
删除和更新选择哪一个取决于具体情况。
由你决定。

MySQL外码如何设置_MySQL外键约束创建与关联表设计教程

MySQL 外键非常方便。
说白了就是保证表之间的数据不乱。
怎么做呢?主要有两个方面。

1 .创建外键的方法
1 .创建表时决定 例如,这样写: SQL 创建表客户端( 标识符 INT 主键 AUTO_INCRMENT, 名称 VARCHAR(1 00) NOT NULL );
创建表命令( order_id INT 主键自动递增, customer_id INT NOT NULL, 约束 fk_customer 外键 (customer_id) 客户参考 (id) 关于取消更新级联的限制 );
ON DELETE RESTRICT 这里的意思是:如果删除客户,则不要删除订单。
ON UPDATE CASCADE 表示父表id改变了,子表customer_id也改变了。

2 表创建完成后,添加 SQL ALTER TABLE Orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCEScustomers(id) ON DELETE RESTRICT ON UPDATE CASCADE;
添加之前,请注意orders表中的customer_id必须与customers表中的id匹配。
如果你看到orders表有customer_id=9 9 9 ,但是customers表中没有这个人,那么你不能添加他们。

2 外键的作用和使用
1 .数据并不复杂 外键可以防止“命令指向不存在的客户端”的愚蠢行为。
例如,在金融系统中,订单必须链接到真实的客户,外键可以确保这一点。
2 02 0年,各大厂商订单数据出现倒挂。
在许多情况下,这是因为没有正确使用外键。

2 有优点也有缺点 优点是数据库自己管理数据一致性,无需开发人员在程序中反复检查。
缺点是增删改查时必须额外检查外键约束,速度会比较慢。
但只要外键列有索引,影响就不会很大。
2 02 1 年测试,建立了索引外键约束,影响小于1 毫秒。

适合使用外键的场景:
电商订单是不可篡改的数据
医院病历等重要信息
任何需要准确数据的业务系统
3 添加外键时的陷阱和正确姿势
1 .陷阱:
orders表中的customer_id是9 9 9 ,但是customers表中没有这个人(最常见)
数据类型不一致,例如INT和BIGINT
外键列没有索引,关联查询速度极慢。

如果修改大表,会被长时间锁定(MySQL 5 .6 之后OnlineDDL可以缓解这个问题)
ON DELETE CASCADE 使用得太频繁,删除客户端时所有命令都会消失
2 正确姿势:
在添加外键之前检查不兼容的数据: SQL 选择o。
FROM 订单 o LEFT JOIN 客户 c ON o.customer_id = c.id WHERE c.id IS NULL;

确保数据类型完全相同
外键列需要建立索引,尤其是多列时一起用作外键。

晚上系统不忙时添加外键
先在测试环境中运行并保存数据
4 .设计关联表结构的技巧
1 .必须遵循范式 使用外键实现第三范式。
例如,客户信息单独存储,订单表中只存储客户ID,避免重复存储地址。

2 选择正确的数据类型 外键列和主键列类型必须完全相同。
INT就是INT,不要改成BIGINT。

3 索引必须是 外键列上的索引对于以下三件事尤其重要:
JOIN关联表速度很快
约束检查速度很快
级联更新很快
4 选择正确的瀑布策略
RESTRICT(默认):如果父表被删除或修改,子表不会相应移动。

CASCADE:当父表移动时,子表也会相应移动(例如订单状态随客户状态变化)
SET NULL:父表被删除或修改,子表的外键设置为NULL(外键列中允许NULL)
NO ACTION:与RESTRICT类似,但验证时间不同
5 不要过度追求范式 有时常用字段的冗余存储可以节省JOIN并加快读取速度。
但你应该清楚地考虑存储过多的数据是否会导致更新过程中出现错误。

6 关注比赛 当并发量较高时,外键检查会导致锁。
批量操作前可以暂时禁用外键检查(SET FOREIGN_KEY_CHECKS=0),但使用后必须重新启用,否则数据会乱七八糟。

MySQL安装后如何设置外键_MySQL外键约束配置方法