【MySQL】P11 事务(2)事务四大特性 并发事务 事务隔离级别
创始人
2024-06-03 09:43:27

事务

  • 事务的四大特性 ACID
  • 并发事务
    • 并发事务引发的问题
    • 事务隔离级别
    • 四种事务隔离级别
    • 查看/修改事务隔离级别

事务的四大特性 ACID

原子性:(Atomicity)
事务是不可分割的最小操作单元,要么全部成功,要么全部失败;

一致性:(Consistency)
事务完成时,必须是所有数据保持一直状态;

隔离性:(Isolation)
多组事务存在并发,但是根据数据库系统提供的隔离机制,互不干扰;

持久性:(Durability)
事务一旦提交或回滚,其对数据库中数据的更改是持久性的。


并发事务

并发事务引发的问题

脏读:

事务A 读取到 事务B 还没有提交的数据;

# 切换到最低事务隔离级别
set session transaction isolation level read uncommitted;
# 启动事务A与事务B
start transaction;
# 事务A查看表内容(并行1)
select * from account;
# 事务B修改表内容(并行1)
update account set money = money - 1000 where name= "张三";
# 事务A查看表内容
select * from account;			# 发现数据库内容变化,但是事件B仍未提交commit;出现错误脏读;

解决方法:切换到 read committed 模式下;


不可重复读:

事务A 先后两次读取同一条记录时,两次读取到的数据不同;

解决方法:切换到 repeated read 模式下
不管事件B是否提交数据,事件A读取同一条记录一直保持不变,直到事件A也提交数据后再次查询;


幻读:

事务A 查询数据时,没有对应数据行,但是插入数据时,发现数据已经存在;事务B 插入数据并提交,但是事务A 由于具有不可重复性,所以虽然显示查询不到,但是也插入不了;

解决方法:切换到 serializable 模式下
事务A阻塞事务B,直到事务A提交后,事务B才可以进行插入操作;


事务隔离级别

存在四种事务隔离级别,事务隔离级别越高,数据越安全,但是性能越低;

四种事务隔离级别

Read uncommitted		# 存在问题:脏读、不可重复度、幻读
Read committed			# 存在问题:不可重复读、幻读
Repeatable Read			# 存在问题:幻读(MySQL默认)
Serializable			# 存在问题:无

查看/修改事务隔离级别

查看事务隔离级别

select @@transaction_isolation;

设置事务隔离级别

set session transaction isolation level read uncommitted;
# 修改事务隔离级别为 Read uncommitted

事务的隔离级别越高,事务越安全,但是性能会越低;
事务的隔离级别越低,事务越不安全,但是性能高;

我们需要权衡事务隔离级别,一般采用默认的 Repeatable Read


相关内容

热门资讯

是最近的距离,也是最远的距离|...   赵紫名  因为有梅西,阿根廷毫无疑问是本届世界杯最受媒体关注的球队之一,日常训练、赛前新闻发布会...
下周山西多分布不均雷雨天气 局... (来源:山西日报)未来一周,我省多分布不均雷雨天气,局部伴有强对流,主要影响时段为7月4日—8日和1...
警方通报“少年在家和同学饮酒后... (来源:法治日报)7月3日晚,安徽淮南市公安局田家庵分局发布警情通报:关于网上报道“淮南一15岁少年...
中船先锋|七〇三所蒸汽动力事业...   在庆祝中国共产党成立105周年之际,党中央对全国“两优一先”进行表彰。中国船舶集团有限公司七〇三...
啤酒节里藏着“宝藏”文创市集   游客在选购文创产品。  本报讯(记者 李佳琪文/摄)7月3日,第二十四届哈尔滨国际啤酒节在哈尔滨...