事务处理:
维护数据库的完整性,保证成批的MySQL操作,要么完全执行,要么完全不执行。
具体操作:
如果没有发生错误,则整组语句提交给数据库表;如果发生错误,则进行回退,以恢复数据到某个已知且安全的状态。
相关术语:
- 事务(transaction),指一组SQL语句;
- 回退(rollback),指撤销指定SQL语句的过程;
- 提交(commit),指未存储的SQL语句结果写入数据库表;
- 保留点(savepoint),指事务处理过程中设置的临时占位符,可以对它发布回退。
哪些语句不能回退:
create 或drop操作(也就是执行回退,它们并不会被撤销。)
控制事务处理:
事务的开始:
start transaction
使用回退(rollback):
select * from ordertotals; //显示ordertotals表的内容,不为空
start transaction;
//开始事务处理
delete from ordertotals; //删除ordertotals表所有行
selete * from ordertotals; //显示ordertotals表确实为空
rollback;
//回退(撤销)start transaction之后的所有语句
selete * from ordertotals; //显示ordertotals表不为空
显然:
rollback只能在一个事务处理内使用。
使用提交(commit)
一般的MySQL语句,提交是自动进行的。
但在事务处理块中,提交
不会隐含地进行。
例:确保完全删除订单20010
start transaction;
delete from orderitems where order_num=20010;
delete from orders where order_num=20010;
commit;
隐含事务关闭
当commit或rollback语句执行后,事务会自动关闭。
使用保留点
对简单的事务可以整个提交、回退;但是复杂的事务,需要部分提交、回退。
实现:
在合适的位置放置占位符,在需要的时候,可以会退到占位符。
savepoint deletel;
rollback deletel;
保留点在执行一条rollback或commit后自动释放。
更改默认提交
set autocommit=0; //指示MySQL不自动提交更改。
autocommit决定是否自动提交更改,不管有没有commit。