InnoDB 引擎支持事务处理
-
什么是事务处理
事务处理可以用来维护数据库的完整性,保证成批的MySQL操作要么全都执行,要么都不执行。事务处理是一种机制,用来成批的执行MySQL操作,以保证数据库不包含不完整的操作结果。
- 事务transaction:指的是一组SQL语句
- 回滚rollback:撤销指定的SQL语句的过程
- 提交commit:将未存储的SQL语句结果写入数据库表中
- 保留点savepoint:指事务处理中设置的临时占位符place hoder,可以对它发布回退
-
使用ROLLBACK
SELECT * FROM ordertotals;-- 查看这个表 START TRANSACTION;-- 开始事务 DELETE FROM ordertotals;-- 删除这个表中的所有行 SELECT * FROM ordertotals;-- 查看这个表 ROLLBACK;-- 回滚START之后的所有的语句 SELECT * FROM ordertotals;
不能回退SELECT语句因为没有意义,不能回退CREATE/DROP 操作
-
使用COMMIT
一般MySQL语句是直接针对数据库进行执行和编写的,是隐匿提交/提交是自动进行的。
事务处理块,提交是不隐匿进行的,为进行明确的提交要使用COMMIT语句
START TRANSACTION; DELETE FROM ordertotals WHERE order_num = 20010; DELETE FROM orders WHERE order_num = 20010; COMMIT;-- 当语句块全部不出错时才会提交
在COMMIT或ROLLBACK之后,事务会自动关闭,提交方式变为隐匿提交
-
使用保留点 SAVEPOINT
更复杂的事务处理需要部分提交和回退,需要在事务处理块合适的位置防止占位符,回退时可以回退到某个占位符
START TRANSACTION; DELETE FROM ordertotals WHERE order_num = 20010; SAVEPOINT deleter;-- 标识的唯一名字 DELETE FROM orders WHERE order_num = 20010; ROLLBACK TO deleter;-- 指明要回退的保留点
保留点可以使用多个,会在事务完成后自动释放。
-
更改默认的提交行为
SET autocommit = 0;-- 更改MySQL为不自动提交 SET autocommit = 1;-- 默认自动提交、更改MySQL为自动提交
本文的回退和回滚都对应ROLLBACK操作,因为优快云对MySQL语句的支持不足而使用SQL的代码块内编写