并非所有的引擎都支持事务管理,MyISAM不支持事务管理,InnoDB支持事务管理。
事务管理可以用来维护数据库的完整性。它保证成批的MySQL操作要么完全执行,要么完全不执行。
事务(transaction)指一组SQL语句;
回退(rollback)指撤销指定SQL语句的过程;
提交(commit)指将未存储的SQL语句结果写入数据库表;
保留点(savepoint)指事务处理中设置的临时占位符,你可以对它发布回退(与回退整个事务处理不同)。
管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
使用START TRANSACTION语句来标识事务的开始。
ROLLBACK使用示例:
SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK;
SELECT * FROM ordertotals;
首先执行一条SELECT以显示该表不为空。然后开始一个事务处理,用一条DELETE语句删除ordertotals中的所有行。另一条SELECT语句验证ordertotals确实为空。这时用一条ROLLBACK语句回退START TRANSACTION之后的所有语句,最后一条SELECT语句显示该表不为空。
不能回退CREATE或DROP操作。
一般的MySQL语句都是直接针对数据库表执行和编写的,这就是所谓的隐含提交,即提交操作是自动进行的。
使用保留点以达到部分提交或者回退的目的。
每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道要回退到何处。
SAVEPOINT delete1;
……
ROLLBACK TO delete1;
保留点在事务处理完成后自动释放。自MySQL5以来也可以使用RELEASE SAVEPOINT明确地释放保留点。
为知识MySQL不自动提交更改,需要使用以下语句:SET autocommit=0;
⚠️注意:autocommit标志是针对每个连接而不是服务器的。