如果 表A 里有10件满足 更新日期 = 20131112 的数据,
现在,我用2个线程同时去更新数据,更新用sql文都是:update 表A set 字段1 = ‘hello world’ where 更新日期 = 20131112
而且,2个线程用2个不同的数据库连接,autocommit都设置成false
那么更新结果有没有可能会出现,一个线程更新了3件数据,另外一个线程更新了7件数据的结果,甚至出现2个线程都更新了10件数据的结果呢?

解决方案 »

  1.   

    如果commit了,你说的情况是有可能发生的!
    最好是对线程访问数据库做同步。不然这样的操作很危险
      

  2.   

    不好意思,我的问题描述的不对,更新用sql文如下:
       线程1:update 表A set 更新日期 = 20131113 where 更新日期 = 20131112
       线程2:update 表A set 更新日期 = 20131114 where 更新日期 = 20131112
    如果JDBC的事务隔离级别是Read Uncommitted的话,结果如何,是Read Committed的话,结果又是什么情况?
      

  3.   

    以Mysql的Innodb数据库来说。
    调用更新语句会将在这行数据上增加一个行锁,所以对于单行的数据更新第一句成功,第二句就会更新不成功。
      

  4.   

    应该不会出现吧,update语句是写操作要加锁的,两个线程一起写,会保留最后一个线程写的结果