mysql隔离级别详解及示例

 更新时间:2021年09月08日 15:07:07   作者:有梦想的  
经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗,本文主要介绍了mysql的四种隔离级别,具有一定的参考价值,感兴趣的可以了解一下

只是单纯知道事物的隔离级别,但是从未操作过 今日操作一次。

脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。

不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

mysql的4种隔离级别

read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的
repeatable read:重读读取:可以解决脏读 和 不可重复读 —mysql默认的
serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

创建数据表:

create table shuzhi
(
  id mediumint(8) primary key,
  name varchar(30),
  shuzhi mediumint(10)
);
alter table shuzhi engine=innodb;
insert into shuzhi values(1,'aa',1000);
insert into shuzhi values(2,'bb',2000);
insert into shuzhi values(3,'cc',3000);
insert into shuzhi values(4,'dd',4000);
insert into shuzhi values(5,'ee',5000);
insert into shuzhi values(6,'ff',6000);
insert into shuzhi values(7,'gg',7000);
insert into shuzhi values(8,'hh',8000);

开始测试事物的4种隔离级别 第一种:read uncommitted (读未提交)

设置隔离级别

#查询当前的隔离级别
SELECT @@tx_isolation
#设置隔离级别 set session transaction isolation level  [隔离级别]
set session transaction isolation level  read uncommitted

先开启第一个进程 先开启事物 暂不进行查询

窗口1
start transaction;

再开启第二个进程(终端)
先开启事物 修改一条记录 不commit

窗口2
start transaction;
update shuzhi set shuzhi='8888' where id=7;

去数据库查询发现id=7的值还是7000值并没改变

在这里插入图片描述

再去窗口1中查询这个记录

窗口1
start transaction;
select * from shuzhi where id=7

在这里插入图片描述

发现读到的数据是窗口2中为提交的数据 并不是7000

到此这篇关于mysql隔离级别详解及示例的文章就介绍到这了,更多相关mysql隔离级别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL如何改变表的存储引擎方式

    MySQL如何改变表的存储引擎方式

    这篇文章主要介绍了MySQL如何改变表的存储引擎方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • sql格式化工具集合

    sql格式化工具集合

    如果想要我们的SQL语句看起来很美观,除了自己平时注意外,还有一个懒人方法
    2011-08-08
  • MySQL同步数据Replication的实现步骤

    MySQL同步数据Replication的实现步骤

    本文主要介绍了MySQL同步数据Replication的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 使用navicat将csv文件导入mysql

    使用navicat将csv文件导入mysql

    这篇文章主要为大家详细介绍了使用navicat将csv文件导入mysql,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Mysql主从延时图解方法

    Mysql主从延时图解方法

    我们知道,一个服务器开放N个链接给客户端连接的,就会有大并发的更新操作,但是从服务器的里面读取binlog线程得仅有一个,当某个SQL在从服务器上执行的时间稍长 或由某个SQL要锁表就会导致主服务器的SQL大量积压,未被同步到从服务器,就导致了主从不一致,也就是主从延迟
    2022-01-01
  • MySQL使用show status查看MySQL服务器状态信息

    MySQL使用show status查看MySQL服务器状态信息

    这篇文章主要介绍了MySQL使用show status查看MySQL服务器状态信息,需要的朋友可以参考下
    2017-01-01
  • MySQL存储过程相互调用并获得错误码示例

    MySQL存储过程相互调用并获得错误码示例

    这篇文章主要介绍了MySQL存储过程相互调用并获得错误码,需要的朋友可以参考下
    2014-03-03
  • MySQL启动失败报错:mysqld.service failed to run ‘start-pre‘ task的问题分析与解决方案

    MySQL启动失败报错:mysqld.service failed to run 

    在日常运维中,MySQL 作为广泛应用的关系型数据库,其稳定性和可用性至关重要,然而,有时系统升级或配置变更后,MySQL 服务可能会出现无法启动的问题,本文针对某次实际案例进行深入分析和处理,需要的朋友可以参考下
    2024-12-12
  • 基于mysql 5.5 设置字符集问题的详解

    基于mysql 5.5 设置字符集问题的详解

    本篇文章是对关于mysql 5.5设置字符集的问题进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL 可扩展设计的基本原则

    MySQL 可扩展设计的基本原则

    可扩展设计是一个非常复杂的系统工程,所涉及的各个方面非常的广泛,技术也较为复杂,可能还会带来很多其他方面的问题。但不管我们如何设计,不管遇到哪些问题,有些原则我们还是必须确保的。
    2021-05-05

最新评论