并发插入insert,根据状态判断重复记录的问题
2010-04-09 11:27
302 查看
在判断记录是否重复,通常在插入这条记录时会用select语句查询时下是否有相同记录,如果存在,就不允许插入。
这种select和insert之间有时间间隔,如果并发的有两个人同时在insert,在select时,都没发现有相同的记录,结果数据库里就被插入了两条相同的记录。
这种方式不能严格的控制记录的唯一性
由于组合字段有些情况下可以重复,所以又不能在组合字段上建立唯一约束。
解决上述问题有下面几中方法
1. 用某些情况可以重复的组合字段+一个标志字段建立唯一约束,不能重复的情况,标志位都相同,如都为1。如果可以重复的,将标志位设置成随机数,如UUID,36进制数字
2.把一个字段里不同值的记录放在不同的表里,这样就可以在表上建立唯一约束了。比如,把字段值等于1的放一个表,字段值等于2的放另一个表
3.使用统一的锁,在插入之前锁定,让后判断是否重复,再插入
这种select和insert之间有时间间隔,如果并发的有两个人同时在insert,在select时,都没发现有相同的记录,结果数据库里就被插入了两条相同的记录。
这种方式不能严格的控制记录的唯一性
由于组合字段有些情况下可以重复,所以又不能在组合字段上建立唯一约束。
解决上述问题有下面几中方法
1. 用某些情况可以重复的组合字段+一个标志字段建立唯一约束,不能重复的情况,标志位都相同,如都为1。如果可以重复的,将标志位设置成随机数,如UUID,36进制数字
2.把一个字段里不同值的记录放在不同的表里,这样就可以在表上建立唯一约束了。比如,把字段值等于1的放一个表,字段值等于2的放另一个表
3.使用统一的锁,在插入之前锁定,让后判断是否重复,再插入
相关文章推荐
- insert中加入where条件判断,解决插入重复数据的问题
- 并发insert情况下会发生重复的数据插入问题
- 高并发时,进行insert操作出现重复记录问题分析
- 并发insert情况下会发生重复的数据插入问题
- insert中加入where条件判断,解决插入重复数据的问题
- 并发insert情况下会发生重复的数据插入问题
- 并发insert情况下会发生重复的数据插入问题
- mysql insert if not exists防止插入重复记录的方法
- 记一个奇怪的数据库记录重复插入的问题排查过程
- MySql避免重复插入记录(根据主键判重)
- 并发请求的重复插入问题
- 删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最大的记录
- 原来SortedList是根据comparer的比较结果判断插入的键是否重复的...
- 关于SQL Server2005支不支持一条insert语句插入多条记录的问题
- mysql insert if not exists防止插入重复记录的方法
- sqlserver常用操作——判断关键字段是否重复插入记录
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- java 解决分布式环境中 高并发环境下数据插入重复问题
- 记录ASP.NET页面表单初始状态(主要是为了前台可以根据这个判断页面是否变动了)
- 删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有id最小的记录