mysql 添加一条数据,需要判断数据是否重复。用组合索引好,还是查询数据后代码判断比较好,还是说有其他方法

2020-07-13 10:24:53 +08:00
 duoyuanyz
3444 次点击
所在节点    Java
19 条回复
qsbaq
2020-07-13 11:02:47 +08:00
感觉用异常处理方便些,只管插入就行了。
qsbaq
2020-07-13 11:03:09 +08:00
当然得设置唯一键
playniuniu
2020-07-13 11:09:58 +08:00
设置唯一索引,如果数据可以覆盖,就用 sql 里面的 replace into,否则就 insert into,看然后抓报错
takemeaway
2020-07-13 11:14:25 +08:00
不对吧,用异常那得是唯一索引啊,数据不可能都做索引吧。

再说了重复分很多种,单 KEY 还是多 KEY 重复呢?
zsdroid
2020-07-13 11:14:47 +08:00
有逻辑删除需求的,唯一键会特别坑。
1018ji
2020-07-13 11:26:00 +08:00
判断是否重复,然后的业务逻辑是啥?
rr41ns
2020-07-13 11:31:32 +08:00
联合唯一索引?
jugelizi
2020-07-13 11:35:18 +08:00
伪删除的坑埋了
raysmond
2020-07-13 11:42:04 +08:00
得是数据库唯一索引才行。代码单个线程逻辑判断不行的,多线程和分布式环境下不适用。
VictorJing94
2020-07-13 11:49:26 +08:00
unique 约束啊
passerbytiny
2020-07-13 12:04:08 +08:00
看业务复杂度,简单的就主键 /唯一+捕获“唯一性冲突”异常,复杂点的就要先查出来再判断。但你问得是组合索引,说明不是单个字段,那业务复杂度就不会简单,必须选后者。
littlewing
2020-07-13 12:51:49 +08:00
数据重复的定义是啥?是只要 key 重复就算还是整行数据所有字段都相等?
realpg
2020-07-13 12:52:16 +08:00
unique index
insert ignore
获取 insert id
FFFire
2020-07-13 14:33:57 +08:00
不是特别要求效率的话还是查一下吧,业务上的事别埋坑
Yuicon
2020-07-13 14:55:50 +08:00
加全局锁 然后查一遍插入
Tokiomi
2020-07-13 15:35:48 +08:00
互联网没有物理删除
wangsilence
2020-07-13 16:12:07 +08:00
建议使用逻辑,唯一索引不会使用 change buffer, 会影响插入效率
cs3230524
2020-07-13 18:42:21 +08:00
newdongyuwei
2020-07-14 09:25:38 +08:00

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

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

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

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

© 2021 V2EX