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条数据。