首页 理论教育 MySQL事务提交技巧:使用保存点实现部分提交与撤销

MySQL事务提交技巧:使用保存点实现部分提交与撤销

时间:2023-11-22 理论教育 版权反馈
【摘要】:使用MySQL命令“start transaction;”可以开启一个事务,该命令开启事务的同时,会隐式地关闭MySQL自动提交。图9.19 事务提交与回滚原理4.保存点保存点可以实现事务的“部分”提交或者“部分”撤销。

MySQL事务提交技巧:使用保存点实现部分提交与撤销

1.关闭MySQL自动提交

关闭自动提交的方法有两种:一种是显示地关闭自动提交,一种是隐式地关闭自动提交。

方法一:显示地关闭自动提交。

使用MySQL命令“set autocommit=0;”,可以显示地关闭MySQL自动提交。

方法二:隐式地关闭自动提交。

使用MySQL命令“start transaction;”可以隐式地关闭自动提交。隐式地关闭自动提交,不会修改系统会话变量@@autocommitte的值。

推荐使用方法二。

2.回滚

关闭MySQL自动提交后,数据库开发人员可以根据需要回滚(也叫撤销)更新操作。

3.提交

MySQL自动提交一旦关闭,数据库开发人员需要“提交”更新语句,才能将更新结果提交到数据库文件中,成为数据库永久的组成部分。自动提交关闭后,MySQL的提交方式分为显示地提交与隐式地提交。

(1)显示地提交:MySQL自动提交关闭后,使用MySQL命令“commit;”可以显示地提交更新语句。

(2)隐式地提交:MySQL自动提交关闭后,使用下面的MySQL语句,可以隐式地提交更新语句。

① begin、set autocommit=1、start transaction、rename table、truncate table等语句;(www.xing528.com)

② 数据定义(create、alter、drop)语句,例如create database、create table、create index、create function、create procedure、alter table、alter function、alter procedure、drop database、drop table、drop function、drop index、drop procedure等语句;

③ 权限管理和账户管理语句:例如grant、revoke、set password、create user、drop user、rename user等语句);锁语句(lock tables、unlock tables)。

使用MySQL命令“start transaction;”可以开启一个事务,该命令开启事务的同时,会隐式地关闭MySQL自动提交。使用commit命令可以提交事务中的更新语句;使用rollback命令可以回滚事务中的更新语句,如图9.19所示。

图9.19 事务提交与回滚原理

4.保存点

保存点(也称为检查点)可以实现事务的“部分”提交或者“部分”撤销。

使用MySQL命令“savepoint 保存点名;”可以在事务中设置一个保存点,使用MySQL命令“rollback to savepoint 保存点名;”可以将事务回滚到保存点状态。原理如图9.20所示。

图9.20 事务回滚到保存点

说明:“rollback to savepoint B”仅仅是让数据库回到事务中的某个“一致性状态B”,而“一致性状态B”仅仅是一个“临时状态”,该“临时状态”并没有将更新回滚,也没有将更新提交。事务回滚必须借助于rollback(而不是“rollback to savepoint B”),事务的提交需借助于commit。

使用MySQL命令“release savepoint 保存点名;”可以删除一个事务的保存点。

如果该保存点不存在,该命令将出现错误信息:ERROR 1305(42000):SAVEPOINT does not exist。如果当前的事务中存在两个相同名字的保存点,旧保存点将被自动丢弃。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈