5.3.2 事务提交与回滚

5.3.2 事务提交与回滚

事务是由一组SQL语句构成的,它由一个用户输入,并以修改成持久的或者回滚到原来的状态而终结。系统默认自动提交事务,关闭自动提交的命令是:set@@autocommit=0;,而开启自动提交的命令是:set@@autocommit=1;。

1.开始事务

当一个应用程序的第一条SQL语句或者在commit或rollback语句后的一条SQL语句开始,就开始了一个新的事务,也可以使用start transaction语句启动一个事务。格式为:

2.提交事务

MySQL有两种提交的方式:

①显示提交:使用commit命令显示自上一次提交后到该命令处的所有SQL语句。

②隐式提交:在MySQL中,更新语句、数据定义语句和权限管理语句是隐式提交的。

更新语句有begin、start transaction、rename table、truncate table等。

数据定义语句(create、alter、drop)有create database、alter table、drop view等。

权限管理和账户管理语句有grant、set password、create user、drop user等。为了有效地提交事务,尽量使用显式提交。

【例5.8】使用MySQL自动提交功能,向数据表departments中插入一条部门信息,并查看结果。

代码如下:

3.回滚事务

撤销整个事务,数据恢复到事务开始时候的状态。语句为rollback。

【例5.9】关闭MySQL自动提交功能,向数据表departments中插入一条部门信息,并使用rollback命令回滚事务。查看回滚前后数据表中数据的变化。

代码如下:

在事务中向数据表中插入一条部门信息后,数据表中已经正确存入第8条数据,事务回滚后,再次查询数据表时,数据已经回到事务开始之前,不存在第8条数据。