start transaction ;
set autocommit = 0;
insert into a value(3,222);
insert into b value(3,222);
commit;
如上如何使上面两条语句都成立才执行,如果一条不成立都不执行
貌似如果a成立不管b成立与否都执行了,根本没rollback

解决方案 »

  1.   

    执行完第一个 insert into a value(3,222); 要判断一下是否成功,失败直接跳转到rollback;
    执行完第二个 insert into b value(3,222); 再判断一下是否成功,成功才能commit;否则还要rollback;
      

  2.   

    正确,因为你设置了set autocommit = 0;关闭了事务的自动提交模式。
    set autocommit = 1;设置自动提交,mysql会自动发出一个commit。
      

  3.   

    因为你后面直接commit了;
    正确的测试:start transaction ;
    insert into a value(3,222);
    insert into b value(3,222);
    rollback;
    或者
    set @@autocommit = 0;
    insert into a value(3,222);
    insert into b value(3,222);
    rollback;
    注意表引擎是INNODB