MySQL事务总结

事务指的是一个操作序列,该操作序列中的多个操作要么都做,要么都不做。

1、MySQL事务的四大特性
简称:ACID特性

原子性(Atomicity)
每个事务都是不可分割的最小单位,事务中的操作要么全部执行,要么全部不执行

一致性(Consistency)
当事务完成时,数据必须处于一致的状态

隔离性(Isolation)
多个事务的执行互不影响,互不干扰

持久性(Durability)
事务一旦提交,对数据的改变,都要记录到存储中

2、事务并发的问题
多个事务同时执行时,可能存在的问题:
(1)脏读:一个事务读到了其他事务还未提交的数据
(2)不可重复读:一个事务内多次读到同一条数据得到的结果不一样的情况(第一次读取后,被其他事务修改)
(3)幻读:与不可重复读类似,幻读是第二次查询数据多了一些原本不存在的记录。

不可重复读与幻读区别:
不可重复读重点是修改,幻读重点在于新增和删除。

解决不可重复读的问题只需要锁住满足条件的行,而解决幻读则需要锁表;

3、事务的隔离级别
从低到高分为以下四种,隔离级别越低,越能支持高并发的数据库操作。

隔离级别脏读不可重复读幻读
READ UNCOMMITTED(读未提交)存在存在存在
READ COMMITED(读提交)不存在存在存在
REPEATABLE READ(重复读)不存在不存在存在
SERIALIZABLE(序列化or串行化)不存在不存在不存在

MySQL默认的是 REPEATABLE-READ

-- 查看默认的事务隔离级别
SELECT @@transaction_isolation;

-- 设置事务的隔离级别
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
set session transaction isolation level serializable;

(完)

最后修改于:2022年08月31日 14:12

添加新评论