关于数据库重复插入数据问题

风2013 2015-11-23 12:30:12
代码写法如下:

执行时由事务控制,肯定是不会同时执行的,以下为我代码事务未提交之前查询分析器执行结果:

但是我目前数据库出现了一模一样的数据


请问各位大神,这种写法是否有其他缺陷,是在什么巧合下才能出现这种情况
...全文
244 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Yole 2015-11-23
那可能是有人同时操作了。
回复
风2013 2015-11-23
引用 1 楼 u010192842 的回复:
看下程序是不是写了2次 或者该表是否有触发器,又执行了一次。
没有触发,这个现象一年都难得出现两次,最近才发现一次
回复
Yole 2015-11-23
看下程序是不是写了2次 或者该表是否有触发器,又执行了一次。
回复
misterliwei 2015-11-23
引用 14 楼 feng1366259807 的回复:
首先感谢各位的回答,问题可能找到,这种数据来源是从APP来的,可能是我app的应用没有更新导致的
要是有其他问题,欢迎继续讨论。
回复
Yole 2015-11-23
回复
风2013 2015-11-23
首先感谢各位的回答,问题可能找到,这种数据来源是从APP来的,可能是我app的应用没有更新导致的
回复
风2013 2015-11-23
引用 12 楼 misterliwei 的回复:
你事务隔离级别是什么? 防止插入重复值最好还是使用唯一索引。
锁行
回复
misterliwei 2015-11-23
你事务隔离级别是什么? 防止插入重复值最好还是使用唯一索引。
回复
风2013 2015-11-23
引用 10 楼 misterliwei 的回复:
[quote=引用 8 楼 feng1366259807 的回复:] [quote=引用 6 楼 sz_haitao 的回复:] 判断存在-成功插入 所花的时间 之间,有其它连接 也进行了判断 1、加上事务:判断存在-成功插入 期间严格禁止其它连接进行了判断 2、使用exists判断,会不会快一些?降低出现的概率 3、if ... begin 之后再 先判断存在。降低出现的概率
如图2就是其他的连接连入的,执行不了,一定要等第一个连接完成之后才能执行第二个连接。[/quote] 为什么一定要等第二个连接结束才能执行? [/quote] 代码里面我加了事务锁控制。
回复
haitao 2015-11-23
引用 8 楼 feng1366259807 的回复:
[quote=引用 6 楼 sz_haitao 的回复:] 判断存在-成功插入 所花的时间 之间,有其它连接 也进行了判断 1、加上事务:判断存在-成功插入 期间严格禁止其它连接进行了判断 2、使用exists判断,会不会快一些?降低出现的概率 3、if ... begin 之后再 先判断存在。降低出现的概率
如图2就是其他的连接连入的,执行不了,一定要等第一个连接完成之后才能执行第二个连接。[/quote] sql里没使用tran?是程序启动事务的?? 如果已经启动事务,按理说不可能重复的。。。。
回复
misterliwei 2015-11-23
引用 8 楼 feng1366259807 的回复:
[quote=引用 6 楼 sz_haitao 的回复:] 判断存在-成功插入 所花的时间 之间,有其它连接 也进行了判断 1、加上事务:判断存在-成功插入 期间严格禁止其它连接进行了判断 2、使用exists判断,会不会快一些?降低出现的概率 3、if ... begin 之后再 先判断存在。降低出现的概率
如图2就是其他的连接连入的,执行不了,一定要等第一个连接完成之后才能执行第二个连接。[/quote] 为什么一定要等第二个连接结束才能执行?
回复
风2013 2015-11-23
引用 6 楼 sz_haitao 的回复:
判断存在-成功插入 所花的时间 之间,有其它连接 也进行了判断 1、加上事务:判断存在-成功插入 期间严格禁止其它连接进行了判断 2、使用exists判断,会不会快一些?降低出现的概率 3、if ... begin 之后再 先判断存在。降低出现的概率
如图2就是其他的连接连入的,执行不了,一定要等第一个连接完成之后才能执行第二个连接。
回复
yooq_csdn 2015-11-23
时间的确很接近
回复
haitao 2015-11-23
判断存在-成功插入 所花的时间 之间,有其它连接 也进行了判断 1、加上事务:判断存在-成功插入 期间严格禁止其它连接进行了判断 2、使用exists判断,会不会快一些?降低出现的概率 3、if ... begin 之后再 先判断存在。降低出现的概率
回复
Yole 2015-11-23
偶然事件喽~~~一年要是就一次,那就忍忍吧~~
回复
风2013 2015-11-23
引用 3 楼 u010192842 的回复:
那可能是有人同时操作了。
同时操作不会有印象的,当第一个请求没有完成之前,我数据表是锁的,请看第二个图,是执行不了的
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-11-23 12:30
社区公告
暂无公告