数据库表去重 unique 失效

2014-07-16 13:34:22 +08:00
 Zuckonit
假设有一张文件信息表, 我是根据文件md5去去重的, 且UniqueConstraint('md5', name='md5_uqe'),现在我往表里面插入数据, 发现一个问题, 当快速多次触发插入同一条文件信息的动作的时候, 发现这条文件信息会有两次记录。 由于插入一条信息比较耗时,我在插入一条数据的时候会先去判断表里面是否已经存在该MD5, 不存在才插入, 我猜测是不是因为在一条信息还没插完的时候, 同样md5的信息也在插入, 造成了该问题, 可是unique难道没效果么? 请教大家有啥解决方案。

环境: mysql + sqlalchemy
2900 次点击
所在节点    问与答
3 条回复
msg7086
2014-07-16 13:46:19 +08:00
mysql有用到unique索引吗?

先判断md5再插入的话操作不是原子性的,会被打断
Zuckonit
2014-07-16 13:57:49 +08:00
@msg7086 这个的确不是原子性操作, 请教通过sqlalchemy不这样做还有什么办法
msg7086
2014-07-16 14:07:55 +08:00
@Zuckonit 如果你一定要在不加unique索引的情况下判断的话,得用insert select where not exists来实现原子操作。

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

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

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

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

© 2021 V2EX