create procedure aa()
begin
     start transaction;
     SET @i = 1;
        while @i <=  5 do
              insert into abc values ('a');
              SET @i = @i + 1;
              if @i = 3 then
                    rollback;
              end if;
       end while;
end结果abc表里插入了3条记录,为什么rollback不起作用呢???怎样才能使数据全回滚啊???

解决方案 »

  1.   

    你用一个自增ID的表就可以测试出来已经回滚了。Sproc' body.delimiter ||
    create procedure aa()
    begin
        start transaction;
        SET @i = 1;
            while @i <=  5 do
                  insert into abc(a) values ('a');
                  SET @i = @i + 1;
                  if @i = 3 then
                        rollback;
                  end if;
          end while;
    end||
    delimiter ;Table's body.CREATE TABLE `abc` (                                   
              `id` int(10) unsigned NOT NULL auto_increment,       
              `a` varchar(255) NOT NULL,                           
              PRIMARY KEY  (`id`)                                  
            ) ENGINE=InnoDB;
      

  2.   

    测试结果:call aa;
    select * from abc;query resultid a
    3 a
    4 a
    5 a如果没有IF 判断的话,ID 为1 和 2的记录是插进去的。因为有IF判断,所以回滚了。