MySQL学习笔记-事务
事务
事务:是一组操作的集合,是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败(当操作中某一步出现异常时,前面已执行的步骤也会失效)。
感觉有点像是函数。
- 默认MySQL的事务是自动提交的,当执行一条DML语句,MySQL会立即隐式地提交事务。
一. 事务操作
方式1: 修改事务提交方式
1. 查看/设置事务提交方式
# 查看事务提交方式(1为自动 0为手动)
select @@autocommit;
# 设置事务提交方式
set @@autocommit = 0;
2. 提交事务
commit;
3. 回滚事务
rollback;
方式2: 使用指令控制事务
1. 开启事务
start transaction;
# or
begin;
2. 提交事务
commit;
3. 回滚事务
rollback;
二. 事务四大特性
1. 原子性(Atomicity)
事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
2. 一致性(Consistency)
事务完成时,必须使所有的数据都保持一致状态。
3. 隔离性(Isolation)
数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
4. 持久性(Durability)
事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
三. 并发事务问题
并发事务问题:指的是A事务和B事务在同时操作同一个数据库或同一张表时所引发的问题。
- 不可重复读:当一个事务中先后有两个查询同一个数据的操作时,如果在第一个操作后第二个操作前有一个并发的事务修改了那个数据并提交了,则会出现前后两个查询结果不一样的情况,由于一个事务是一起成功或一起失败,则数据的变更就算是出错了。
四. 事务隔离级别
事务隔离级别: 用于解决并发事务问题。
-
上图中的✓意思是可能发生。
-
上图中从上往下效率递减。(事务隔离级别越高,数据越安全,但是性能越低)
-
查看与设置事务隔离级别:
# 查看事务隔离级别
select @@transaction_isolation;
# 设置事务隔离级别
set [session|global] transaction isolation level {隔离级别};
# session 会话级别 仅对当前客户端窗口有效
# global 针对于所有客户端的会话窗口有效