给数据库字段添加唯一性的字段约束有什么弊端吗

2019-11-15 15:40:46 +08:00
 rqxiao

比如说普通的插入数据 员工表里有主键 员工编号

员工编号就是唯一的

这一步唯一性的校验 放在代码里判断 和 数据库里做约束 都有什么利弊吗

5911 次点击
所在节点    程序员
24 条回复
mtrec
2019-11-16 10:25:02 +08:00
mysql 里唯一约束的写入性能会差 因为要保证唯一性 不在内存的数据涉及随机 io 无法使用 change buffer
arnoldFu
2019-11-16 10:56:16 +08:00
还是要在代码里做的吧,最经典的例子就是 name 不允许重复,但是允许用户做删除(系统逻辑删),这个时候数据库里 deleted 和 name 字段相同的数据就会有很多,这个时候 name 或者 name+deleted 作为唯一索引都不行,
这种情况大家在开发中都是怎么解决的?
wysnylc
2019-11-16 11:43:21 +08:00
数据库唯一约束,分表无法使用
要做严格唯一约束就弄个 redis 之类的内存校验或者从业务上允许重复
单机环境爱咋搞咋搞,就那样
Inside
2019-11-16 22:36:05 +08:00
前面说利用数据库唯一索引的各位,应该考虑一下唯一索引为什么存在?我认为诸如唯一索引、外键等等约束,是因为在关系数据库诞生早期,是人工用 SQL 直接去操作数据库的,为了防止人为失误,所以建立了严格的约束。
现在操作数据库的大都是自动化代码,这些事情代码都能干,而且表达能力更强。

至于“再怎么做并发检查,只要不在数据库系统里做,理论上还是有重复”这样的观点,我只想说,难道关系数据库不是人写出来的?哪怕是不用数据库,只用各大语言的标准库去实现,也能轻松做到唯一索引这样的玩意,做不到还是别自称会写代码了。

如果现代的程序员们做不到前辈们能做到的事情,那前辈们会对我们非常失望以及感到悲哀吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/619930

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX