MySQL数据库中外键的作用及用法详解

哎呀,说到MySQL数据库外键,这很有趣。
首先我们来说说外键的作用。

首先,外键可以保证数据的完整性。
例如,您有一个学生委员会和一份成绩单。
成绩单中的学生代码必须与学生表中的学生代码一致,不能随意填写。
这样可以避免数据不一致。

其次,外键可以建立表之间的关系。
如果你想一想,学生记录和成绩单之间肯定存在关系。
外键可以理清这种关系,以后查询或者操作数据的时候会方便很多。

此外,外键还可以限制数据操作。
不能随意修改学生表或成绩单中的数据,但必须遵循外键规则。

使用方法,主要有以下几种方式:
1 .创建表时定义外键。
例如,您创建一个学生表,然后创建一个成绩单,并在成绩单中定义一个指向学生表的学生 ID 的外键。

2 修改表结构并添加外键。
如果突然想向现有表添加外键,可以使用 ALTER TABLE 命令。

3 删除外键。
如果你觉得外键不合适,也可以使用ALTER TABLE命令删除它。

例如我们创建两个表,学生表和成绩表。
学生表中有一些关于学生的信息,成绩单中有一些关于成绩的信息。
班级表中的学生代码必须与学生表中的学生代码匹配。

最后说一下外键的重要性。
这可以确保数据完整性并提高运营效率。
它是数据库设计中的重要工具。

说实话,当时我并没有想到外键这么复杂的东西,但是用起来还是蛮方便的。
是的,就是这样。

mysql数据库中主键和外键有什么作用

等等,我昨天在调试订单系统时遇到了一个奇怪的事情。
用户删除客户信息。
结果,订单表中的客户ID仍然是相同的数字,但订单详细信息不再相关。
经过一番查找,发现原来的外键约束是ON DELETE CASCADE,但是客户表中有一条NULL客户ID的记录没有处理。
这让我想起上周的测试库存更新。
由于我忘记在产品表中设置主键索引,所以批量导入时实际上有两条“Apple Phone”的重复记录。
CPU运行了一下午后,发现导入脚本忘记去重了。

我在咖啡馆里看着邻桌的程序员指着MySQL文档,他问我:“你觉得用自增ID和业务ID(比如订单号)作为主键哪个更好?” 随口说自增ID省事,突然想起去年的电商系统用订单号作为主键,查询速度比自增ID快3 0%。
等等,还有一件事。
如果外键级联更新是跨库操作,事务隔离级别必须设置为SERIALIZABLE。
上次我遇到麻烦就是因为我没有注意这一点。

现在服务器监控显示主键索引命中率为9 7 %,但与外键关联的JOIN操作实际上占了CPU负载的4 0%。
这个数据说明了什么? 注意表关联设计不能只考虑数据一致性,还需要进行裁剪和优化。
例如,客户表使用UUID作为主键,订单表使用客户ID作为外键。
虽然避免了自增ID长度的问题,但是JOIN时索引失败的成本太高。
上周重构时,客户ID改为INT类型,查询响应时间直接降低了5 0%。

我突然想到辞职的DBA说过的话:“主键和外键就像结婚证,只有有了它,数据才合法。
但是与我们的客户表不同,主键使用自增ID,外键使用客户名称作为索引。
结果每年8 月份系统都会崩溃,都是因为客户名称重复太多。
” 这听起来像是一个笑话,但是上周我检查索引碎片时发现,订单表的外键索引确实有1 5 %被全表扫描了。

现在我发现了一个新问题。
主键索引维护成本会随着数据量的增加而增加吗? 例如,表现在有5 00万条记录,主键是INT类型。
如果再增加1 000万条数据,索引重建时间会增加多少? 监控工具显示当前主键DML延迟为0.5 ms,但是如果改用BIGINT类型,这个延迟会翻倍吗? 我需要找时间做一下压力测试。