在执行MySQL语句时,系统默认自动提交,但是语句一旦出现报错,就可能导致数据出现大规模错误,所以我们要做的就是,将自动提交方式改为手动提交方式。
在改为手动提交之后,如果执行语句出现错误,数据库数据也不会发生更改,需要操作者确认提交,数据库数据才会发生更改。
- 查看当前提交方式:
- select @@autocommit;
建立一个数据库,存放着jom和kom的存款数据,jom存款10000元,kom存款5000元,现在jom给kom转账1000元,执行操作语句如下:
此时为自动提交方式:
在这个错误语句中,第三条SQL语句不能正常执行,但前两条语句已经执行,这将导致jom的账户余额变为9000元,kom的账户余额不会发生改变。
在(1)中,这样的错误是十分致命的,这将会导致数据的严重缺失,所以将提交方式设置为手动提交是必要的。
- 将提交方式设置为手动提交
- set @@autocommit=0;
执行如下语句:
- select * from account where name='jom';
- update account set money=money-1000 where name='jom';
- update account set money=money+1000 where name='kom';
再次执行(1)中错误语句之后,然后再去刷新数据库,发数据库的数据并不会发生改变,这时需要执行commit;语句,数据才会发生改变。
- 提交数据:
- commit;
执行结果:
回滚语句:
- 回滚操作:
- rollback;
在这种提交方式中,不需要设置commit参数,只需要执行如下语句即可:
- # 第一步,开启事务
- start transaction ;
- # 方式二:
- # 第一步,开启事务
- start transaction ;
- # 第二部,执行指令
- select * from account where name='jom';
- update account set money=money-1000 where name='jom';
- 程序执行报错 ...
- update account set money=money+1000 where name='kom';
- select @@autocommit;
- # 第三步,提交事务
- commit;
- # 第四步,回滚事务,结束当前事务
- rollback;