mysql事务隔离级别

mysql事务隔离级别-凯发平台

游戏|数码彩彩2024-08-16 7:36:50478

老生常谈:事务是逻辑上的一组操作,要么都执行,要么都不执行

经典实例:转账给你,我减少100,你增加100,不能因为系统故障导致,我钱转出了,而你没收到

事务的四大特性

  • a:原子性,最小执行单位,要么都执行,要么都不执行
  • c:一致性,?
  • i:隔离性,并发访问数据库是,两个事务是独立的,
  • d:持久性

串行执行是不会事务执行很顺畅,但当不同事务同时执行时可能出现各种情况,以student表为例

# 表定义

create table `student` (
  `id` int(11) not null auto_increment,
  `name` varchar(32) default null,
  `create_time` timestamp null default current_timestamp on update current_timestamp,
  primary key (`id`)
) engine=innodb default charset=utf8mb4;

# 初始数据

mysql> select * from student;
 ---- ---------- --------------------- 
| id | name     | create_time         |
 ---- ---------- --------------------- 
|  1 | jarry    | 2020-08-13 09:14:01 |
|  2 | hameimei | 2020-08-13 09:14:09 |
 ---- ---------- --------------------- 
2 rows in set (0.00 sec)

一个事务读到另一个事务未提交的事务

mysql事务隔离级别

 

session_2在session_1读期间改了数据后,又回退了事务,导致session_1读的数据根本不存在

mysql事务隔离级别

 

一个事务中,可以读到另一个事务已经提交的数据

mysql事务隔离级别

 

一个事务查询某个条件查出记录,之后别的事务对数据进行插入,那么第一个事务再用同样的条件查询时得到的结果和一开始的到的结果不一致

对于前者, 只需要锁住满足条件的记录

对于后者, 要锁住满足条件及其相近的记录

不可重复读重点在于update和delete,而幻读的重点在于insert

mysql事务隔离级别有4个:读未提交、读已提交、可重复读、可串行化

# 读未提交

mysql事务隔离级别

 

# 读已提交

mysql事务隔离级别

 

#可重复读

mysql事务隔离级别

 

session_2 读 session_1 发生变更提交,并且自己也提交后才可以读到session_1的变更

可以解决脏读、不可重复度,但是不能解决幻读问题

#可重复读

mysql事务隔离级别

 

mysql事务隔离级别

 

点击这里复制本文地址 凯发平台的版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(https://www.angyang.net.cn)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

凯发平台-凯发k8旗舰厅 © all rights reserved.  网赚杂谈

网站地图