首页 > 数据库 >MySQL——事务补充

MySQL——事务补充

时间:2024-06-03 21:34:01浏览次数:26  
标签:事务 快照 补充 获取 read MySQL view 进行

十一、RR和RC的本质区别

select * from 表名 (lock in share mode)
#当不加共享锁时,说明此时进行的是快照读,加了共享锁则进行的是当前读;

​ 当进行快照读的时候才会形成read view结构;

​ read view形成的时机不同,会影响事务的可见性,会造成RR和RC级别下事务可见性的不同;当RR级别下,某个事务对某条记录进行快照读时会创建一个read view结构,会将当前活跃的其他事务进行记录;此后使用的都是这一个read view,即使之后进行了修改也是看不见的;即RR级别下只有一个read view并且不进行更新;只要被记录在m_ids中就不可见;

​ 在RC级别下,事务执行中,每次进行快照都会重新生成一个read view,所以每次其他事务提交之后,m_ids中的内容就会做更新,然后当前事务就能够看到更新后的数据记录;

总结:RR级别只是在首次进行快照读的时候生成read view结构,而RC级别就是,每次进行快照读都会重新生成一个read view结构

十二、各种并发场景总结

读-读

共享锁:对表中记录进行读取时会先获取共享锁,允许多个事务进行读取记录,但是不允许修改;如果已经有事务获取了排他锁,则无法获取共享锁,只能等待排他锁释放之后,才可以获取共享锁;

当进行快照读时,由于访问的记录不是同一个,快照所以不需要进行加锁;而当进行当前读时,这是就需要获取共享锁然后对同一个记录进行读取

写-写

排他锁:对表中记录进行修改时会先获取排他锁,这种时候只允许一个事务访问记录,保证互斥;

​ 由于多版本并发控制设计,所以进行写操作是并不会直接修改历史版本的(也就是快照),而是修改表中的当前记录,由于表中的当前记录只有一份,当进行修改时会存在并发问题,所以需要进行加锁,也就是写操作时的排他锁;

读-写

​ 对于读写并发场景,由于每一个事务的执行生命周期是不一样的,所以需要设置不同的隔离级别来实现不同的记录可见性;

RU级别:不会进行快照读,只是进行当前读读取操作不会进行加锁但是写操作会进行加锁,但是是行级锁,意味着其他事务可以继续的读取其他行;

RC级别:进行快照读,读操作,对于表中数据会获取共享锁,对于快照不会获取锁,进行写操作会获取排他锁每次进行快照读都会生成一个新的读视图

RR级别:进行快照读,读操作,对于表中数据会获取共享锁,对于快照不会获取锁,进行写操作会获取排他锁只有首次快照读才会生成读视图

串行化级别:不会进行快照读,只是进行当前读,所以需要进行加锁,如果是读就会获取共享锁,写操作会获取排他锁

标签:事务,快照,补充,获取,read,MySQL,view,进行
From: https://blog.csdn.net/qq_33093885/article/details/139424200

相关文章

  • 基于SSM+Jsp+Mysql的高校二手交易平台
    开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示前台首页用户注册用户登录个人中心商品信息管理员登录商品上架管理商品信息管理客服聊天管......
  • 【MySQL】MySQL Connect -- 详解
    一、Connector /C使用要使用 C 语言连接MySQL,需要使用MySQL 官网提供的库,可以去官网进行下载:MySQL::MySQLCommunityDownloads我们使用 C 接口库来进行连接,要正确使用,还需要做一些准备工作:保证 MySQL 服务有效。在官网上下载合适自己平台的 MySQLConnec......
  • 持续性学习-Day17(MySQL)
    1、初识MySQLJavaEE:企业级Java开发Web前段(页面展示,数据)后端(连接点:连接数据库JDBC;链接前端:控制,控制反转,给前台传数据)数据库(存数据)1.1数据库分类关系型数据库(SQL):MySQL、Oracle、SqlServer、DB2、SQLlite通过表和表、行和列之间的关系进行数据的存储非关系型数......
  • 在MySQL中,你可以使用动态SQL和存储过程来根据元数据表查询多个表,并将结果集合并。以下
    DELIMITER$$CREATEPROCEDUREMergeDataFromTables()BEGIN--游标声明DECLAREdoneINTDEFAULTFALSE;DECLAREtbl_nameVARCHAR(255);DECLAREcurCURSORFORSELECT表明FROMtable_col;DECLARECONTINUEHANDLERFORNOTFOUNDSETdone=TRU......
  • kylinV10SP3安装MySQL5.7.44
    需要的安装包:mysql-community-common-5.7.44-1.el7.x86_64.rpmmysql-community-libs-5.7.44-1.el7.x86_64.rpmmysql-community-client-5.7.44-1.el7.x86_64.rpmmysql-community-server-5.7.44-1.el7.x86_64.rpm开始安装,安装顺序:common->libs->client->serverrpm-ivhmysq......
  • mysqlwirter
    DataXMysqlWriter1快速介绍MysqlWriter插件实现了写入数据到Mysql主库的目的表的功能。在底层实现上,MysqlWriter通过JDBC连接远程Mysql数据库,并执行相应的insertinto...或者(replaceinto...)的sql语句将数据写入Mysql,内部会分批次提交入库,需要数据库本......
  • MySQL从入门到高级 --- 12.事务 && 13.锁机制 && 14.日志
    文章目录第十二章&&第十三章&&第十四章:12.事务12.1特性12.2隔离级别13.锁机制13.1各存储引擎对锁的支持状况:13.2锁特性13.3MyISAM表锁13.3.1加表锁13.4InnoDB行锁13.4.1行锁特点13.4.2行锁模式14.日志14.1错误日志14.2二进制日志14.2.1日志格式14.3......
  • mysql 树形结构存储方案
    在MySQL中存储树形结构数据时,通常会遇到查询性能和数据维护的问题,特别是当树形结构较深或者数据量大时。以下是一些优化树形结构存储的方案:邻接列表模型(AdjacencyListModel):这是最直接的方法,即在每个节点记录中包含其父节点的ID。优点:实现简单,易于理解和操作。缺......
  • MyBatis实现MySQL表字段及结构的自动增删
    前言在开发过程中,总会涉及到数据库表结构字段的增加或者删除,或者是索引的增加和减少,这个时候能把修改表结构字段这些工作都交给程序来进行,那能大大方便开发。正好有一个现成的工具可以在springboot里面实现这个流程。介绍mybatis-enhance-actable上述是gitee链接。这个工具是m......
  • SQLServer事务的妙用
    日常处理数据,难免会操作数据库。update,delete或者insert操作,例如没有带条件或者带的条件不对,将痛苦万分。踩坑王在此分享经验,希望能帮到到家。 操作技巧:就一句话,只要是update,delete或者insert,提前开启一个事务,再去执行相应的sql语句。如果发现错了直接rollback即可。确认无......