首页 新闻 会员 周边

一个sql的疑难杂症,请问大牛如何解释?

0
悬赏园豆:20 [待解决问题]

一个sql语句是这样写的,没有事务,出现这种情况有可能吗?

update tableA set a='1',status='2'
where 条件

insert into tableB(field1,field2) values('1','2')

结果,tableB 插入了记录,tableA 的 a 更新为1了,status却没更新到。
怎么会这样,有可能吗?

办公室里一个从事多年编程的说,也曾遇过这样的情况。
以我的知识,很难理解会出现这种情况,大家有何高见?

arthur613的主页 arthur613 | 初学一级 | 园豆:182
提问于:2013-10-25 17:25
< >
分享
所有回答(4)
0

语句A:update tableA set a='1', status='2' where 条件
语句B:insert into tableB( field1, field2 ) values('1','2')

两个问题可能需要考虑一下
1,A和B语句之间有GO或者分号吗?如果没有,那么你是通过什么方式执行这两条语句的。比如假设C#中的SqlCommand类会把A和B拆分为两条语句来单独执行,相互不影响结果(未经实测!!!)。
2,status在某些数据库中是关键字,这可能造成该语句不执行,试试用[status]代替。

飞扬的尘埃 | 园豆:1318 (小虾三级) | 2013-10-25 17:38

没有分号,是某些特定情况下如此,低几率。,所以你说的两种情况都不是。

支持(0) 反对(0) arthur613 | 园豆:182 (初学一级) | 2013-10-25 17:44
0

不太可能出现你说的情况,一个语句是一个事务。不可能更新一般

56180825 | 园豆:1756 (小虾三级) | 2013-10-25 21:29
0

绝对不可能

肯定是有其它操作,让status又恢复为原始值,如:触发器或程序的其它逻辑等等,不然就是数据库坏了

Yu | 园豆:12980 (专家六级) | 2013-10-26 08:36

自然,我也觉得是不可能,可是以我有限的知识,不敢包票说百分百不可能哦。

跟踪了sql语句,没发现有其他地方update这个值,这个数据库有跨库操作,是计划任务,不知道有没其他地方有操作,我也怀疑是不是其他地方作了修改。但不能作实际跟踪,生产环境呢,几百万数据在跑。

所以,求救大家,看有否可能会出现这种情况。

 

支持(0) 反对(0) arthur613 | 园豆:182 (初学一级) | 2013-10-26 13:50

补充说明: 我是在测试环境跟踪的,都不会出现这种情况,但在生产环境却偶有这种情况发生,生产环境作不了跟踪。

支持(0) 反对(0) arthur613 | 园豆:182 (初学一级) | 2013-10-26 13:53

@arthur613:那就查看 SQL LOG 

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-10-26 14:46

或者在该表加一个触发器,如果有更新,则 触发器 可以在临时表中操作插入的操作等等

支持(0) 反对(0) Yu | 园豆:12980 (专家六级) | 2013-10-26 15:34
0

规范sql才是重点

田林九村 | 园豆:2367 (老鸟四级) | 2013-10-27 11:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册