数据库隔离级别详解[通俗易懂]

数据库隔离级别详解[通俗易懂]之前,我们有讲过数据库的索引,链接为数据库索引详解今天,我们将讲解数据库的隔离级别。一、隔离级别的种类与分别可以解决的问题:事务的隔离级别分为4个,即读未提交(readuncommitted)、读已提交(readcommitted)、可重复读(Repeatableread)、可串行化(Serializable)oracle默认的隔离级别为读已提交。mysql的默…

大家好,又见面了,我是你们的朋友全栈君。

  之前,我们有讲过数据库的索引,链接为 数据库索引详解 今天,我们将讲解数据库的隔离级别。

一、隔离级别的种类与分别可以解决的问题:

  事务的隔离级别分为4个,即 读未提交(read uncommitted)、读已提交(read committed)、可重复读(Repeatable read)、可串行化(Serializable)

 oracle默认的隔离级别为 读已提交。mysql的默认隔离级别为 可重复读。

 其中可以解决的问题如下表:

数据库隔离级别详解[通俗易懂]

  简单来说:

  脏读即为session A读取到了session B中未提交的数据

  不可重复读即为session A读取到了session B提交的数据,即前后session A读取的数据不一致

  幻读即为session A读取到了session B insert的数据。

 

二、隔离级别的设置与查询:

 1、设置隔离级别:

  设置隔离级别分为设置全局的隔离级别与设置当前的隔离级别

  全局设置,已存在的session不会生效,以后的新session会生效(以读未提交举例):

   set global transaction isolation level read uncommitted;

  单独设置当前连接:

    set session transaction isolation level read uncommitted;

 2 、查看当前隔离级别:

   select @tx_isolation;

 

三、事务隔离级别的测试:

有一个goods表,里面有id、count(商品数量)、brandId(品牌id)

CREATE TABLE `goods` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`count` int(11) DEFAULT '0',

`brandId` int(11) DEFAULT '0',

PRIMARY KEY (`id`),

KEY `idx_brandId` (`brandId`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf-8;

1、脏读(设置隔离级别为读未提交):

  脏读为读到其它事务未提交的数据:

A B

select * from goods where id = 1;

返回1

 
  update goods set count = 2 where id = 1;

select * from goods where id = 1;

返回2

 
  commit;

2、不可重复读(设置隔离级别为 读已提交)

  不可重复读为读到其它数据已提交的数据,即前后查询数据不一致

A B

select * from goods where id = 1;

返回1

 
  update goods set count = 2 where id = 1;

select * from goods where id = 1;

返回1

 
  commit;

select * from goods where id = 1;

返回2

 

3、幻读(设置隔离级别为 可重复读):

  幻读为读到别人已提交的写入数据库的数据。

  幻读与不可重复读的区别为幻读为读到新插入的数据(insert),而不可重复读主要是更改与删除(update、delete)。

  即不可重复读前后被其它session update、delete的数据没有问题,不会有变化,但是其它session insert的可能有变化。

A B

select * from goods where brandId = 1;

返回有id为1,2的两条

 
  insert into goods (count,brandId) values (3, 1);
  commit;

select * from goods where brandId = 1;

返回有id为1,2,3的三条

 

当隔离级别为 可串行化 的时候则不会出现上述问题。

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141226.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 《博弈论与生活》思维导图高中_生活与消费思维导图

    《博弈论与生活》思维导图高中_生活与消费思维导图前几天看了个综艺《决胜21天》,主要是体现21种博弈论模型的游戏,非常有启发意义。而且博弈论在商业领域、机器学习领域都会有应用,是职场中必须要了解和掌握的一门知识。正好找到了一个有意思的入门点。先入个门,之后再深入系统的学习这个领域。…

    2022年10月15日
  • 空间回归与地理加权_时空地理加权回归对样本量要求

    空间回归与地理加权_时空地理加权回归对样本量要求实际上,除了辅助表以外,GWR还会生成一份全要素的表。对回归的每一个样本都给出相应的信息,今天就来看看这些信息代表了什么内容。生成的新的要素类字段信息如下:实际上,Coeffcient(系数)和StandardErrorConffcient(标准差系数)会对每一个解释变量都给出一个值,所以可以看成是两类值,下面把各个值的情况和意义做个简单描述:其中ArcGIS

  • 微信小程序列表页面_微信发现没有小程序

    微信小程序列表页面_微信发现没有小程序尽量不要用缓存去写效果展示:点击编辑,进入编辑页第一页编辑按钮:<viewclass=”bj-btn”bindtap=”redactGroup”data-id=”{{传递的id}}”>编辑</view>redactGroup方法:options.currentTarget.dataset.前面自定义的名字redactGroup(options){letid=options.currentTarget.dataset.id;…

  • Java SSM框架面试题「建议收藏」

    Java SSM框架面试题「建议收藏」Spring入门:https://blog.csdn.net/qq_40323256/article/details/89738330Spring中的动态代理和aop的自定义通知:https://blog.csdn.net/qq_40323256/article/details/89754201SpringMVC入门:https://blog.csdn.net/qq_40323256/ar…

  • AvaTrade · 爱华MT4软件下载

    AvaTrade · 爱华MT4软件下载这里写自定义目录标题爱华简称AVA,使用的交易软件为多数投资者使用的交易软件:MT4。因此爱华的下载和安装方式和其它的平台的MT4的下载和安装方法是一致的。首先要下载MT4软件,下载方法各个版本是一样的。首先要看版本,MT4软件分为网页版,手机版,mac版。手机版又细分为安卓版和IOS版。mt4。yhtz。cc可以看到上述的所有版本。网页和安卓版以及mac版是需要在网页下载的,当然就可以在爱华的网页上去下载安装包。另外IOS版的除在爱华的网页上下载外,也可以在苹果应用商店下载。爱华的MT4交

  • 学生认证,专业版pycharm

    学生认证,专业版pycharm学生认证pycharm学习自https://blog.csdn.net/qq_36667170/article/details/79905198感谢分享以下记录下自己的过程1、https://www.jetbrains.com/pycharm/buy/?fromIDE#discounts?billing=yearly页面现在变成这样了2、选择Forstudentsandteachers下的learnmore3、Applynow4、填写表单,(一定要是教育邮箱,可以在学校

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号