mysql 事务隔离级别

浩客2年前技术文章591

一、事务隔离级别介绍

  • 多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。

  • 事务隔离级别

     MySQL隔离级别定义了事务与事务之间的隔离程度  

1.png

二、不考虑隔离性,可能会引发如下问题

  • 脏读( dirty read ):当一个事务读取另一个事务尚未提交的改变(update,insert,delete)时,产生脏读

  • 不可重复读( nonrepeatable read ):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读。

  • 幻读( phantom read ):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。

三、演示MySQL的事务隔离级别

1、读未提交(READ UNCOMMITTED)

(1)、脏读

-- 1. 开了两个 mysql 的控制台
-- 2. 查看当前 mysql 的隔离级别
SELECT @@tx_isolation;

-- 3.把其中一个控制台的隔离级别设置 Read uncommitted
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

2.png

--控制台1
--开启事务
start transaction;
use haoke;
CREATE TABLE `account`(
id INT, `name` VARCHAR(32), money INT);
insert into account value(100,'hawk',1000);

--控制台2
--开启事务
start transaction;
use haoke;
select * from account;

3.png

控制台1的事务还未提交,控制台2就查到数据,这就是脏读。

(2)、不可重复读、幻读(基于以上继续操作)

--控制台1
update account set money = 800 where id=100;
insert into account values(200,'jack',2000);
--提交事务
commit;

--控制台2
select * from account;

4.png

  • 控制台2的事务还未commit,由于控制台1的提交影响了控制台2对表数据的读取,就产生了不可重复读、幻读。

  • 通俗的说,就是当两个事务A、B连接到数据的同一表时,希望所能读取到的数据就是在事务连接到表(开启事务)这一时刻的数据

2、读已提交(READ COMMITTED)

--把其中一个控制台2的隔离级别设置 Read committed
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

5.png

  • 读已提交不会产生脏读

6.png

  • 读已提交的隔离级别下产生不可重复读和幻读

3、可重复读(Repeatable read)

7.png

  • 可重复读不会产生脏读

8.png

  • 可重复读的隔离级别下不会产生不可重复读和幻读

4、可串行化(Serializable)

两个事务A、B,当事务A在操作表时且事务A未commit,此时,当事务B试图操作表时,会检查事务A是否commit,如果A未commit,事务B会一直等待。


相关文章

MySQL运维实战之备份和恢复(8.8)恢复单表

xtrabackup支持单表恢复。如果一个表使用了独立表空间(innodb_file_per_table=1),就可以单独恢复这个表。1、Prepareprepare时带上参数--export,xtr...

CDP实操--配置Ranger对hive行过滤(七)

CDP实操--配置Ranger对hive行过滤(七)

1.使用sam_sec查询person表2.用sam_sec认证.3.查询person表:4. 配置行过滤策略。5. 新增策略:6. 过滤anna:7. 查询测试。...

大数据基础之HDFS入门

大数据基础之HDFS入门

一、NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。二、NameNode的工作特点Namenode始终在内存中保存meteda...

开源大数据集群部署(一)集群实施规划

1、集群规划1.1 本次集群规划信息本次实际生产业务体量存在巨大差异,但集群规划内容相同,因此建议实际生产环境按照按照一定比例扩展即可。主机操作系统要求软硬件信息参数配置8C16G操作系统版本Cent...

开源大数据集群部署(六)Keytab文件生成

开源大数据集群部署(六)Keytab文件生成

1、 创建keytab文件除了使用明文密码登录之外,Kerberos还可以使用keytab密码文件登陆,现在为testcuser创建它的keytab文件ipa-getkeytab -s ipa.hdp...

使用impala操作kudu

使用impala操作kudu

登录impala-shell,创建impala_kudu数据库。1、创建表CREATE TABLE student ( id int not null, name STRING null ,...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。