首页 > 数据库 >MySQL 事务隔离级别实现原理

MySQL 事务隔离级别实现原理

时间:2024-10-15 20:24:39浏览次数:5  
标签:事务 transaction 快照 隔离 MVCC InnoDB MySQL 级别 id

InnoDB 有两种读取数据的方式

  • 快照读/一致性读,MVCC
  • 当前读,获取读写锁后读取行的最新数据

InnoDB 用一致性读视图实现了 MVCC,用于支持读已提交和可重复读隔离级别的实现。

启动事务时立即创建视图

start transaction with consistent snapshot

快照读

快照读/MVCC

InnoDB 每个事务都有一个唯一的事务id,transaction id。
它是在事务开始的时候向 InnoDB 事务系统申请的,按申请顺序严格递增。

每次更新数据行时,InnoDB 会生成一个新的数据版本(undo log)并把 transaction id 赋值给这个数据版本的 row trx_id。

当前读

如果应用逻辑是查询后更新数据,应该使用当前读,否则快照读可能读到旧数据,造成客户端丢失更新。

更新语句和加锁的查询语句会使用当前读。

加读锁

select ... lock in share mode

加写锁

select ... for update

标签:事务,transaction,快照,隔离,MVCC,InnoDB,MySQL,级别,id
From: https://www.cnblogs.com/liaozibo/p/18464586

相关文章

  • MySQL 行锁
    InnoDB和MyISAM对比Innodb支持崩溃恢复InnoDB支持事务InnoDB支持行锁B+Tree叶子节点存储内容不同MyISAM记录表行总数,InnoDB没有两阶段锁InnoDB读操作会使用MVCC,而写操作会使用写锁。InnoDB两阶段锁协议:行锁是在需要的时候加上的,并且要等到事务提交后才释放......
  • MySQL 选错索引
    查看执行计划选择的索引explainselect*fromtwhereabetween10000and10000;通过慢日志(slowlog)查看语句执行情况--启动慢日志SHOWVARIABLESLIKE'slow_query_log';--慢日志存储位置SHOWVARIABLESLIKE'slow_query_log_file';--慢日志阈值SHOWVARIABLES......
  • 倒排索引和ES相关概念对比MySQL
    1.倒排索引1.1倒排索引两个重要概念:文档:用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息以京东商城为列词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这......
  • C++使用MySQL官方的C API访问MySQL数据库
    这篇文章是一个简单的C++使用MySQL官方的CAPI访问MySQL数据库的代码示例。//main.h#ifndef_H_#define_H_#include<stdio.h>#include<Windows.h>#include<mysql.h>#pragmacomment(lib,"libmysql.lib")#defineinsert_prepare"insertintotest_tbvalue......
  • jumpserver堡垒机部署 添加资产主机和MySQL数据库,图解过程
    jumpserver堡垒机部署JumpServer是广受欢迎的开源堡垒机,是符合4A规范的专业运维安全审计系统。JumpServer帮助企业以更安全的方式管控和登录所有类型的资产,实现事前授权、事中监察、事后审计,满足等保合规要求。下载软件包JumpServer-开源堡垒机-官网#官方网址......
  • Elasticsearch相关概念对比MySQL
    MySQLElasticsearch说明TableIndex索引(index),就是文档的集合,类似数据库的表(table)RowDocument文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)SchemaMappingMappi......
  • Elasticsearch相关概念对比MySQL
    Elasticsearch和MySQL是两种不同的数据管理系统,各自有其独特的概念和应用场景。以下是它们在几个关键概念上的对比:o数据模型Elasticsearch:。文档(Document):基本的数据单元,存储为JSON格式。。索引(Index):类似于数据库,包含多个文档。。类型(Type):在7.x版本后已被弃用,之前用于逻......
  • mysql:赋予表格数据、用 cmd 运行 mysql 访问数据。
    前言:mysql:新建数据库与数据表,并用cmd运行mysql成功访问到了数据。-CSDN博客(一)创建表格数据打开MySQLWorkbench,跟据以下步骤操作。完成以上步骤,表格数据提交成功,现在打开cmd命令符运行mysql。(二)借助cmd运行mysql数据mysql-uroot-p(运行) showdatabase......
  • docker-compose安装mysql/redis/nacos环境
    dockerdocker-compose安装查看上一篇文章1.新建目录并创建docker-compose.yaml文件文件内容services:mysql:image:mysql:8.2.0container_name:mysqlenvironment:MYSQL_ROOT_PASSWORD:1qaz@WSXMYSQL_DATABASE:nacosMYSQL_USER:......
  • MySQL面试题-为什么用了索引就会加快查询
    快速定位数据索引类似于书的目录,它提供了一种快速定位数据的方法。没有索引时,MySQL需要逐行扫描整个表(全表扫描)来查找满足查询条件的记录,这可能需要很长时间,特别是当表很大时。而有了索引,MySQL可以迅速定位到索引中满足条件的记录位置,然后直接访问这些记录,从而大大减少了需要......