【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


相关内容

热门资讯

围绕“加大保障和改善民生力度,... 5月11日至15日,全国政协副主席周强率全国政协专题调研组,围绕“加大保障和改善民生力度,扎实推进全...
浙江省“爱在浙里”集体婚礼暨“...   5月16日,浙江省民政厅主办的浙江省“爱在浙里”集体婚礼暨“积极婚育观”宣传系列活动举行,杭州主...
打起手鼓唱起歌!第二届中国新疆... 来源:石榴云/新疆日报 5月15日,第二届中国新疆民间艺术季新闻发布会在乌鲁木齐市召开。本届艺术季将...
降雨推迟,预计20时前后影响北... 气象部门介绍,当前降雨主要出现在房山和门头沟。截至18时,全市平均降水量1.0毫米,最大降水量为房山...
“我真的撑不住了”,2000万... 5月14日、15日两天,知名搞笑博主“大连老湿王博文”,分别在微信公众号和小红书上发表长文,宣布断更...