多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
**1. 事务控制语句** * `BEGIN` 或 `START TRANSACTION` 显式地开启一个事务; * `COMMIT` 也可以使用 `COMMIT WORK`,不过二者是等价的。提交事务,并使已对数据库进行的所有修改成为永久性的; * `ROLLBACK` 也可以使用 `ROLLBACK WORK`,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改; * `SAVEPOINT identifier_name`,`SAVEPOINT` 允许在事务中创建一个保存点,一个事务中可以有多个 `SAVEPOINT`。保存点在执行`COMMIT`,或`ROLLBACK`后自动被释放; * `RELEASE SAVEPOINT identifier_name` 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常; * `ROLLBACK TO identifier_name` 把事务回滚到保存点; * `SET TRANSACTION` 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有`READ UNCOMMITTED`、`READ COMMITTED`、`REPEATABLE READ` 和 `SERIALIZABLE`。 **2. 开启事务的方式** 1、用 `BEGIN`, `ROLLBACK`, `COMMIT`来实现 ``` BEGIN 开始一个事务 ROLLBACK 事务回滚 COMMIT 事务确认 ``` 2、直接用 `SET` 来改变 MySQL 的自动提交模式; ``` SET AUTOCOMMIT=0 禁止自动提交(开启事务) SET AUTOCOMMIT=1 开启自动提交(关闭事务) ``` **3. 案例演示** ```sql BEGIN; #一些insert/delete/update语句 insert into learn_mysql.student(name, age, sex) values('张三',20, '男'); insert into learn_mysql.student(name, age, sex) values('李四',21, '男'); insert into learn_mysql.student(name, age, sex) values('王五',22, '男'); #回滚,对数据库没有任何影响 ROLLBACK; COMMIT; SET AUTOCOMMIT=0; #一些insert/delete/update语句 insert into learn_mysql.student(name, age, sex) values('张三',20, '男'); insert into learn_mysql.student(name, age, sex) values('李四',21, '男'); insert into learn_mysql.student(name, age, sex) values('王五',22, '男'); #回滚,对数据库没有任何影响 ROLLBACK; COMMIT; SET AUTOCOMMIT=0; #一些insert/delete/update语句 insert into learn_mysql.student(name, age, sex) values('张三',20, '男'); insert into learn_mysql.student(name, age, sex) values('李四',21, '男'); insert into learn_mysql.student(name, age, sex) values('王五',22, '男'); #不提交,对数据库没有任何影响 #COMMIT; BEGIN; #一些insert/delete/update语句 insert into learn_mysql.student(name, age, sex) values('张三',20, '男'); #定义保存点save_point_001 SAVEPOINT save_point_001; insert into learn_mysql.student(name, age, sex) values('李四',21, '男'); insert into learn_mysql.student(name, age, sex) values('王五',22, '男'); #回滚到保存点save_point_001 ROLLBACK TO save_point_001; #删除保存点save_point_001 RELEASE SAVEPOINT save_point_001; ROLLBACK; COMMIT; ```