目前我用的MySQL NDB Cluster,MySQL NDB Cluster只支持Read Commited隔离等级,我现在两台服务器都需要对同一个表的同一行执行check then update操作,示例如下:
Server1:
select * from user where id =1;
update user set age=10 where id=1;Server2:
select * from user where id=1;
update user set age=11 where id=1;目前出现了interleave,就是操作序列如下:
Server1: select * from user where id =1;
Server2: select * from user where id =1;
Server1: update user set age=10 where id=1;
Server2: update user set age=11 where id=1;请问有没有办法解决这个问题,从application还是从数据库解决?A

解决方案 »

  1.   

    试试Server1:
    start transaction;
    select * from user where id =1;
    update user set age=10 where id=1;
    commit;Server2:
    start transaction;
    select * from user where id=1;
    update user set age=11 where id=1;
    commit;
      

  2.   

    呵呵,我们是用的NDB API来操作的,不过原理是一样的,第一个select不能够block第二个select,这样导致Server2能够查询到Server1看到的数据
      

  3.   

    sql是顺序执行的
    server1:
    start transaction
    select * from user where id=1;
    update user set age=10 where id=1;
    commit;
    server2
    start transaction
    select * from user where id=1;
    update user set age=11 where id=1;
    commit;