MySQL:45---事务处理(start transaction、rollback、commit、savepoint、autocommit)

一、事务概述

  • 事务处理可以用来维护数据库的完整性,它保证成批的MySQL操作要么全部执行,要么全部不执行
  • 事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错误发生,整租语句提交给数据库。如果发生错误,则进行回退(撤销)以恢复数据库到某个已知且安全的状态

并非所有引擎都支持事务处理

  • 只有InnoDB存储引擎才支持事务处理

几个关键词

  • 事务(transaction):指一组SQL语句
  • 回退(rollback):指撤销指定SQL语句的过程
  • 提交(commit):指将未存储的SQL语句结果写入数据库表
  • 保留点(savepoint):指事务处理中设置的临时占位符(place-holder),你可以对它发布回退(与回退整个事务处理不同)

二、事务的开始(start transaction)

  • MySQL使用下面的语句来标识事务的开始
start transaction;

三、事务的回退(rollback)

  • MySQL使用rollback命令来进行回退(撤销)语句
  • 当使用rollback之后,本次事务会自动关闭

哪些语句可以回退?

  • insert、update、delete语句可以进行回退
  • 不能回退select语句(这样做也没什么意义)
  • 不能回退create或drop操作

演示案例

  • 例如下面执行delete之后,我们将事务进行回退,结束之后
select * from ordertotals;

start transaction;
delete from ordertotals;
select * from ordertotals;
rollback;

select * from ordertotals;

 

四、事务的提交(commit)

  • 事务处理中,当所有的事务处理完成之后,可以使用commit来提交(结束)本次事务
  • 当事务提交之前,如果语句出现了错误,那么本次事务会自动停止

演示案例

start transaction;

delete from orderitems where order_num=20010;
delete from orders where order_num=20010;

commit;

隐含事务关闭

  • 当commit或rollback语句执行后,事务会自动关闭

五、使用保留点(savepoint)

  • 可以使用savepoint设置保留点,当事务进行回退(rollback)时,只需要回退到某个保留点即可

设置保留点

savepoint 保留点名称;

回退到保留点

rollback to 保留点名称;

释放保留点

  • 保留点在事务处理完成(执行一条rollback或commit)会自动释放。但是你也可以使用release savepoint来明确释放保留点
release savepoint 保留点名称;

六、更改默认的提交行为(autocommit)

  • MySQL语句执行时,默认会提交执行的MySQL语句,但是你也可以更改autocommit标志来指明是否自动提交SQL语句
  • autocommit是针对单个连接的,而不是只针对整个服务器的
--设置默认提交(MySQL的默认行为)
set autocommit=1;

--设置默认不提交
set autocommit=0;
发布了1340 篇原创文章 · 获赞 876 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/104055508