**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;
```
- MySQL
- MySQL是什么
- MySQL环境搭建
- centos7-MySQL8
- windows-MySQL8
- 数据库软件
- sqlyog软件安装
- navicat软件安装
- powerDesigner软件安装
- RDBMS术语
- SQL语句组成
- 数据库系统组成
- 数据库操作
- 数据表操作
- 查询语句
- 基本语法
- 子查询
- 表连接
- 查询语句执行顺序
- 事务
- 事务是什么
- 事务的作用
- 事务的4个特性
- 事务隔离级别
- 事务的实现
- 索引
- 索引的作用
- 索引操作
- 存储引擎
- 备份与恢复
- 视图
- 视图是什么
- 视图的作用
- 创建视图
- 查看视图
- 更改视图
- DML操作视图
- 删除视图
- 存储过程与函数
- 过程与函数是什么
- 存储过程操作
- 定义存储过程
- 调用存储过程
- 查看存储过程
- 删除存储过程
- 修改存储过程
- 函数操作
- 过程与函数区别
- 流程控制
- if语句
- case语句
- while循环语句
- repeat循环语句
- loop循环语句
- 变量
- 处理程序
- 光标
- Redis
- 简介
- 下载与安装
- 命令操作redis数据库
- 通用命令
- 数据操作
- 持久化
- Windows上的持久化操作
- 数据库设计
- 数据库设计过程
- ER模型图
- MongoDB
- MongoDB是什么?
- MongoDB特性
- MongoDB 数据模型
- 安装MongoDB
- MongoDB认证
- Database操作
- Collection操作
- Document操作
- 插入
- 查询
- 更新
- 删除
- buckWrite
- MongoDB索引
- 副本集
- 聚焦分析
- 事务管理
- 写关注
- 读关注