数据库高人来看看

来源:百度知道 编辑:UC知道 时间:2024/06/08 07:24:57
这样一条语句
update t set a=a+1 where a=0
a初始值为0
如果2个客户端同时执行这条语句.a的最终结果会是什么?

1 ? 2 ?

或者都有可能?
其实大家说的都不错啦.可只能选一个正确答案呃.

这里所提到的就是所谓时间戳的问题了。一般情况下,两个客户端同时(绝对的)执行某一条语句的机率是相当低的,但如果系统里拥有非常大量的客户端,那么这种机会就有可能出现了。但无论哪种情况,结果只会是1,因为语句本身不可能让a=2出现。而究竟执行了哪个客户端的命令,就不得而知了。

对于这种情况,PowerBuilder(我只会用这个)就有很好的处理机制——事务管理。任何一个更新,必须通过事务提交来完成。同一时间,服务器只接受一个事务提交,即,两个客户端同时提交事务的时候,服务器会提示其中一个事务提交失败。

呵呵,很有意思的问题,刚刚接触的时候,我也有过同样的困惑,但是你想的问题是不会出现的:
例如:第一个客户端执行DML,只有在COMMIT后,才能执行第二个客户端的请求,不进行COMMIT表会被锁的

推荐看一下COMMIT和ROLLBACK的相关资料

不会同时执行,因为在第一个客户端执行的时候,数据库已经被锁了
第二个执行完了就是2了

对,知道执行完了第一条才能执行地二条

第一个执行中时,第二个执行会报错的。除非,第一个commit(提交)。

那就要靠夺旗来解决了

同时,那不就锁了嘛 ..