MySQLl的可串行化_mysql事务串行化的锁机制是怎样的?

1、mysql的可串行化

首先:可串行化serializable
这是事务的最高级别,在每条读的数据上,加上锁,使之不可能相互冲突,因此,会导致大量的超时现象。
解释如下:
以A,B用户为例:

首先将B账号的隔离级别设置为serializable,当B账号开启一个事务,查询各个账户的余额,没有提交事务。此时A账户,也开启一个事务,在事务中执行插入操作,这时A账户的执行操作是不能立即执行的,当B账户执行提交事务操作后,A账户的操作才能执行。


mysql事务 串行化 隔离级别的锁机制是怎样的 在A、B客户端都开启事务,假如 ① 如果A事务删除某条记录(尚未提交回滚),B事务无法读取A事务中删除且未提交的事务,这是因为A事务中加了写锁 ② 如果A事务插入了一条数据(假如ID为4),那么B事务中,ID = 1、2、3都可以正常读,但是 select * from account where id <= 3; 就会等待,不太理解,望不吝赐教、谢谢诸位

参考资料:
① MySQL高性能中提到:串行化会在读取的每一行数据上都加锁(这个意思是部分锁,但不会锁表)
② https://tech.meituan.com/inno…
这里提到:串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
这意思是锁表了,到底是锁表还是锁某些记录
③ 共享锁为什么还会相互阻塞

隔离机制比较复杂,而且不同的数据库还不一致,你的问题是基于MySQL的Innodb,我的理解是这样的:
Serializable隔离在每次访问记录的时候(无论读写),都会锁记录,所以导致了你说的问题,虽然你加了条件id<=3,但还是需要遍历到每条记录,才能给出select结果,所以依然会被锁。
实际项目中,这个级别的隔离很少用(我从来没在实际项目中用过)。因为并发性能低,容易死锁,最常用的还是缺省的REPEATABLE READ或是READ COMMITTED。

②:innodb下,串行化的读并不会锁表,而是根据where条件锁一个范围。
但锁一个范围并不是简单锁记录,因为涉及到Next-key lock。
③:因为插入id=4的记录时,id=4记录不存在,所以会使用gap锁锁住id在3和下一条记录之间的间隙。
select * from account where id <= 3是范围查询,由于Next-key lock机制的存在,不是锁(负无穷,3],而是锁(负无穷,3]+右gap,此时gap锁冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

显示器尺寸对照表_电脑显示器尺寸对照表一览,教你怎么选择最适合自己的显示器尺寸...

显示小课堂&#xff1a;显示器买大买小谁说了算&#xff1f; [本文来自&#xff1a;www.ii77.com]今天&#xff0c;笔者想和大家讨论一下关于显示器尺寸选择方面的问题。通过这两年显示器行业的发展我们不难看出&#xff0c;现在显示器的尺寸越来越大&#xff0c;三十几吋、四十…

MySQL事务隔离级别理解_解读MYSQL的可重复读、幻读及实现原理

前言 提到事务&#xff0c;你肯定不会陌生&#xff0c;最经典的例子就是转账&#xff0c;甲转账给乙100块&#xff0c;当乙的账户中到账100块的时候&#xff0c;甲的账户就应该减去100块&#xff0c;事务可以有效的做到这一点。 在MySQL中&#xff0c;事务支持实在引擎层实现的…

react 子传参父_React 子组件向父组件传值的方法

本文介绍了React 子组件向父组件传值的方法&#xff0c;分享给大家子组件需要控制自己的 state&#xff0c; 然后告诉父组件自己的state&#xff0c;通过props调用父组件中用来控制state的函数&#xff0c;在父组件中展示子组件的state变化。/***实现在输入框输入邮箱时&#x…

MySQ事务

事务 事务是访问数据库的一个操作序列&#xff0c;事务的正确执行使得数据库从一种状态转换为另一种状态。事务必须服从ACID原则。原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。 原子性&#xff1a;不可分割&#xff0c;事务要么全部被执…

boost互斥锁_boost锁使用总结

boost锁的概述&#xff1a;boost库中提供了mutex类与lock类&#xff0c;通过组合可以轻易的构建读写锁与互斥锁。举个通俗的例子&#xff0c;如果共享资源是一个自动锁住的房间&#xff0c;互斥体是钥匙&#xff0c;进入房间必须取钥匙&#xff0c;离开房间应该还钥匙。这就对应…

MySQL 是如何实现四大隔离级别的?

MySQL 是如何实现四大隔离级别的&#xff1f; 在mvcc下&#xff0c;mysql中用到的锁还是共享锁和排他锁么&#xff1f;如果是的话&#xff0c;那么是怎样结合锁和mvcc来实现rc和rr隔离级别的呢&#xff1f;还有mysql中在ru隔离级别下&#xff0c;两个事务同时读取数据对象A&am…

无符号右移负数_关于负数的右移与无符号右移运算小结

对于带符号右移,若为负数,则在存储时首位表示符号位,其值为1,表示该值是负数的移位,在移位过程中,高位补1,若符号位是0,表示是正数,在移位过程中高位补零,两者的前提是符号位保持不变:对于负数的右移&#xff1a;因为负数在内存中是以补码形式存在的&#xff0c;所有首先根据负…

Linux命令 移动/复制文件/目录到指定目录下

1、同一个服务器下复制文件或文件夹 1.1 复制文件 复制文件&#xff1a;把1.txt 复制到根目录下的sbin目录 cp 文件名&#xff08;可带路径&#xff09;目标路径&#xff08;带路径&#xff09;如&#xff1a;cp 1.txt ~/sbin/1,2 复制目录 复制目录&#xff1a;把relea…

springboot2稳定版本_重要版本Spring Boot 2.3.0发布 - spring.io

重要版本Spring Boot 2.3.0于2020年5月15日发布&#xff0c;此版本增加了大量新功能和改进。有关完整的升级说明以及新的和值得注意的功能&#xff0c;请参阅发行说明。2.3的新功能依赖升级Spring Boot 2.3移至几个Spring项目的新版本&#xff1a;Spring Data NeumannSpring HA…

正则表达式——手机号

手机表达式&#xff1a; /^13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/ 可以校验 11为手机号&#xff0c;包含了大部分号段 座机表达式&#xff1a; /^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})(-[0-9]{1,4}){0,1}$/可以校验 区号-电话-分机 上面两条…

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException

异常信息&#xff1a; org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name BusinessAccountController for bean class [com.hs.BusinessAccountController] conflicts with existing, non-compatible bean definit…

c mysql web开发实例教程_Web开发(六)MySql

数据库简介数据库(DB)数据库(database&#xff0c;DB)是指长期存储在计算机内的&#xff0c;有组织&#xff0c;可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储&#xff0c;具有较小的冗余&#xff0c;较高的数据独立性和易扩展性&#xff0c;并可为各种…

Git——工作中使用命令详解

1、Linux常用命令 cd&#xff1a;改变目录cd…&#xff1a;返回上级目录pwd&#xff1a;显示当前目录clear&#xff1a;清屏ls&#xff1a;显示当前目录所有文件touch&#xff1a;添加文件rm&#xff1a;删除文件mkdir&#xff1a;新建文件夹rm -r&#xff1a;删除文件夹mv&am…

mac11.14 mysql_mysql 5.7 11 章 数据类型(1)

前言 这是 一篇mysql 5.7 官方手册的部分翻译&#xff0c;目的加强自己的理解 &#xff0c;和 提升英文水平。不保证质量&#xff0c;速度。部分我感觉没有多大用处的部分没有做翻译。英语手册地址 https://dev.mysql.com/doc/refman/5.7/en/data-types.html------------------…

Java中常见null简析

对于每一个Java程序员来说,null肯定是一个让人头痛的东西,今天就来总结一下Java中关于null的知识。 1.null不属于任何类型,可以被转换成任何类型,但是用instanceof永远返回false. 2.null永远不能和八大基本数据类型进行赋值运算等,否则不是编译出错,就是运行出错. 3.null可以…

怎么从mysql注册表删除用户_mysql 创建和删除用户

1.远程登录mysqlmysql -h ip -u root -p 密码2.创建用户格式&#xff1a;grant 权限 on 数据库.* to 用户名登录主机 identified by "密码"&#xff1b;例1&#xff1a;增加一个test1用户&#xff0c;密码为123456&#xff0c;可以在任何主机上登录&#xff0c;并对所…

服务报错:java.sql.SQLException: Field ‘***‘ doesn‘t have a default value

完整异常 java.lang.RuntimeException: org.springframework.dao.DataIntegrityViolationException:Error updating database. Cause: java.sql.SQLException: Field ‘***’ doesn’t have a default value 问题原因 后端接实体类无默认值&#xff0c;但是前端未传参&#xf…

centos php-mysql_centOS 下安装php和mysql

使用yum install php,yum install mysql安装apache:yum install httpd httpd-devel启动apache:/etc/init.d/httpd start此时输入服务器的IP地址&#xff0c;应该看到apache的服务页面&#xff0c;端口不用输&#xff0c;apache默认就是使用80端口安装mysql:yum install mysql m…

Chrome浏览器F5和ctrl+F5的区别

一、正常重新加载&#xff08;F5&#xff0c;Ctrl R&#xff0c;在地址栏回车&#xff0c;点击链接&#xff09; 本节中的操作&#xff1a;根据缓存的缓存策略&#xff0c;进行处理。如果缓存没过期&#xff0c;就不向浏览器发请求&#xff0c;而是直接使用缓存。 F5或Contr…

mysql 自动生成mapper_自动生成实体类、Mapper、Mapper.xml文件

自动生成实体类、Mapper、Mapper.xml文件搭建Spring Boot Mysql MyBatis 项目核心配置pom.xml创建表配置文件生成文件结果项目结构搭建Spring Boot Mysql MyBatis 项目idea 可直接创建相应的项目及配置核心配置pom.xmlmysqlmysql-connector-java5.1.38org.springframework.…