MySQL主键约束、唯一约束、外键约束、检查约束

MySQL中的四种主要约束类型-主键、唯一键、外键和检查-确保数据的准确性和一致性。

主键

主键用于唯一标识表中的数据,不允许且字段通常不能为空。
定义的格式为:字段名PRIMARYKEY或PRIMARYKEY(字段名)。
可以设置复合主键,但字段组合必须唯一。
自增整数字段用于自动编号,通常与主键一起使用。

演示

创建水果表时,主键约束会防止重复fno,并且当您尝试添加现有的fno值时会报告错误。

唯一

唯一约束保证字段值不重复,但不允许出现多个NULL。
全字段唯一约束相当于主键。

演示

在表fruit_3中,尝试添加重复的fname和NULLfcol会导致错误,说明了唯一约束的作用。

外键

外键用于表之间的关系。
当主表删除数据时,从表对应的数据也会被删除。

演示

班级表链接学生表时,外键约束从表中的学号与主表中的班级号相对应。

Check

检查约束定义行数据必须满足的条件,MySQL8.0及更高版本支持。
例如水果表要求名称中含有葡萄,甜度大于等于10。

演示

添加不满足检查约束的记录时,会报错。

为什么大家很少使用外键了?(二)

MySQL外键是一个特殊的字段,它建立主表和从表之间的关系,保证两个表中数据的一致性和完整性。
本文将结合实例深入探讨外键约束在实际操作中的影响。
外键约束的主要作用是防止非法操作和级联执行。
具体来说,外键可以保证数据的完整性和一致性,避免操作带来的错误。
例如,假设我们有两个表,“Coach”和“Student”,并且“Student”表包含外键约束。
当尝试增加不存在的“coach”ID时,操作将失败,从而确保数据一致性。
同样,在删除关联的“学习者”以防止数据丢失之前,删除“教练”将会失败。
虽然外键约束在数据一致性方面具有显着的优势,但在实际开发中,会导致操作复杂度和性能问题。
每次执行DELETE或UPDATE操作时都需要考虑外键约束,这可能会导致开发过程中痛苦的调试体验,尤其是在处理测试数据时。
另外,使用外键约束在数据更新时需要额外获取锁,增加了并发操作的复杂度。
在高并发、大流量的事务场景下,这可能会导致死锁和数据库资源瓶颈,从而影响性能。
为了避免这些问题,在业务代码中实现关联逻辑时,一般建议在应用层处理数据,而不是直接在数据库层面使用外键约束。
这简化了开发过程并提高了代码的可维护性。
虽然外键在保证数据一致性方面有其价值,但在高频、高并发场景下,外键可能并不是最佳选择。
开源项目KunlunDB提供了一种替代方案,为数据库管理提供了灵活性和效率。
对于数据库层面需要保证数据一致性和完整性的场景,KunlunDB提供了更高效、更灵活的实现。