事务(transaction):指一组SQL语句 回退(rollback):指撤销指定SQL语句的过程 提交(commit):指将未存储的SQL语句结果写入数据库表 保留点(savepoint):指事务处理中设置的临时占位符,可以对它发布回退
使用ROLLBACK MySQL的ROLLBACK命令用来回退(撤销)MySQL语句,看下面的语句:
- SELECT * FROM orderitems;
- START TRANSACTION;
- DELETE FROM orderitems;
- SELECT * FROM orderitems;
- ROLLBACK;
- SELECT * FROM orderitems;
首先执行一条SELECT显示该表不为空,然后开始一个事务处理,用一条DELETE语句删除orderitems中所有的行。另一条SELECT语句验证orderitems确实为空。这时用一条ROLLBACK语句回退START TRANSACTION之后的所有语句。最后一条SELECT语句显示该表不为空。
INSERT、UPDATE和DELETE语句可以回退,而CREATE或DROP操作不能回退。
使用COMMIT 一般的MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交(写或保存)操作是自动进行的。 在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用commit语句。 例如,由于涉及实际的数据库操作,这里只做大概的范例。
- START TRANSACTION;
- 一般性SQL语句.....
- ..
- COMMIT;
隐含事务关闭 当COMMIT或ROLLBACK语句执行后,事务会自动关闭
使用保留点 简单的ROLLBACK和COMMIT语句就可以写入或撤销整个事务处理。 但是更复杂的事务处理可能需要部分提交或回退。 为了占位符,可如下使用:
- SAVEPOINT deletel;
- ROLLBACK TO deletel;
更改默认的提交行为 正如所述,默认的MySQL行为是自动提交所有更改。换句话说,任何时候执行一条MySQL语句,该语句实际上都是针对表执行的,而且所做的更改立即生效。为指示MySQL不自动提交更改,需要如下语句:
- SET autocommit = 0;
autocommit标志是针对每个连接而不是服务器的。