事务
含义
一组逻辑操作单元(一组逻辑操作单元)DML——sql语句)将数据从一种状态切换到另一种状态
特点(ACID)
- 原子性(A):要么全部执行,要么全部回滚
- 一致性:确保数据运行前后的一致性
- 隔离性(I):当多个事务同时操作同一数据库的同一数据时,一个事务的执行不受另一个事务的干扰
- 持久性(D):一旦提交事务,除非其他事务修改,否则数据将持续到本地。
事务的分类
- 隐式事务:
没有明显的和结束没有明显的标志 比如: insert、update、delete语句本身就是一件事
- 显式事务:
具有明显开启和结束事务的标志 1、开启事务 取消自动提交事务的功能 2.一组编写事务的逻辑操作单元(多个)sql语句) insert update delete 3.提交事务或回滚事务
事务隔离等级
并发问题
- 脏读:一个事务读取另一个事务未提交的数据
- 不要重复:在同一事务中,多次读取的数据不一致
- 幻读:当一个事务读取数据时,另一个事务更新,导致第一个事务读取未更新的数据
mysql事务隔离等级(默认可重复)
| 隔离级别 | 脏读(Dirty Read) | 不可重复读(NonRepeatable Read) | 幻读(Phantom Read) |
|---|---|---|---|
| 未提交读(Read uncommitted) | 可能 | 可能 | 可能 |
| 已提交读(Read committed) | 不可能 | 可能 | 可能 |
| 可重复读(Repeatable read) | 不可能 | 不可能 | 可能 |
| 可串行化(Serializable ) | 不可能 | 不可能 | 不可能 |
事务控制语句
设置是否自动提交事务
# 禁止自动提交事务 SET AUTOCOMMIT=0 # 开始自动提交 SET AUTOCOMMIT=1
检查隔离等级
# 查看当前会话隔离级别 select @@tx_isolation; # 检查系统当前的隔离级别 select @@global.tx_isolation;
设置隔离等级
# 设置当前会话隔离等级 set session transaction isolatin level repeatable read; # 设置当前隔离级别的系统 set global transaction isolation level repeatable read;
显示开启事务
BEGIN # 或者 START TRANSACTION
在一个事务中可以创建多个保存点
SAVEPOINT 保存点名称
删除事务保存点
RELEASE SAVEPOINT 保存点名称
回滚到事务保存点
ROLLBACK TO 保存点名称
回滚整个事务
ROLLBACK # 或者 ROLLBACK WORK
提交事务
COMMIT # 或者 COMMIT WORK