草庐IT

MVCC - Read View的可见性判断理解

读了@SnailMann大佬【MySQL笔记】正确的理解MySQL的MVCC及实现原理收益颇丰,非常感谢!但对其中如何判断事务是否可见性还是不太理解,于是作了本文,在原博客基础上,举例画图论证、理解了ReadView的可见性判断。引用@SnailMann大佬【MySQL笔记】正确的理解MySQL的MVCC及实现原理的字段说明。隐式字段每行记录除了我们自定义的字段外,还有数据库隐式定义的DB_TRX_ID,DB_ROLL_PTR,DB_ROW_ID等字段DB_TRX_ID6byte,最近修改(修改/插入)事务ID:记录创建这条记录/最后一次修改该记录的事务IDDB_ROLL_PTR7byte,回

视图 触发器 事务 MVCC 存储过程 MySQL函数 MySQL流程控制 索引的数据结构 索引失效 慢查询优化explain 数据库设计三范式

目录视图createview...as触发器简介创建触发器的语法createtrigger触发器命名有一定的规律临时修改SQL语句的结束符delimiter触发器的实际运用触发器补充方法showtriggers\droptrigger事务事务的四大特性ACID事务实际运用starttransaction事务相关关键字savepoint事务的隔离级别(重要)1.readuncommitted(未提交读)2.readcommitted(提交读)3.repeatableread(可重复读)4.serializable(可串行读)多版本并发控制MVCC存储过程procedure有参函数和无参函数存储过

视图 触发器 事务 MVCC 存储过程 MySQL函数 MySQL流程控制 索引的数据结构 索引失效 慢查询优化explain 数据库设计三范式

目录视图createview...as触发器简介创建触发器的语法createtrigger触发器命名有一定的规律临时修改SQL语句的结束符delimiter触发器的实际运用触发器补充方法showtriggers\droptrigger事务事务的四大特性ACID事务实际运用starttransaction事务相关关键字savepoint事务的隔离级别(重要)1.readuncommitted(未提交读)2.readcommitted(提交读)3.repeatableread(可重复读)4.serializable(可串行读)多版本并发控制MVCC存储过程procedure有参函数和无参函数存储过

卷起来!!!看了这篇文章我才知道MySQL事务&MVCC到底是啥?

事务基础事务事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。特性原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。那实际上,我们研究事务的原理,就是研究MySQL的InnoDB引擎是如何保证事

卷起来!!!看了这篇文章我才知道MySQL事务&MVCC到底是啥?

事务基础事务事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。特性原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。那实际上,我们研究事务的原理,就是研究MySQL的InnoDB引擎是如何保证事

MySQL之事务隔离级别和MVCC

事务隔离级别事务并发可能出现的问题脏写事务之间对增删改互相影响脏读事务之间读取其他未提交事务的数据不可重复读一个事务在多次执行一个select读到的数据前后不相同。因为被别的未提交事务修改,删除数据或数据被更新被当前事务读取到了。幻读一个事务在第一次读取正常数据,第二次读取到其他未提交事务的insert记录,导致读取一个不存在的记录。指一次读取读取到了之前未读取到的数据。事务的4个隔离级别,以及解决的问题READUNCOMMITTED未提交读解决脏写READCOMMITTED提交读解决脏写、脏读REPEATABLEREAD可重复读解决脏写、脏读、不可重复读SERIALIAZBLE可串行化解决脏

MySQL之事务隔离级别和MVCC

事务隔离级别事务并发可能出现的问题脏写事务之间对增删改互相影响脏读事务之间读取其他未提交事务的数据不可重复读一个事务在多次执行一个select读到的数据前后不相同。因为被别的未提交事务修改,删除数据或数据被更新被当前事务读取到了。幻读一个事务在第一次读取正常数据,第二次读取到其他未提交事务的insert记录,导致读取一个不存在的记录。指一次读取读取到了之前未读取到的数据。事务的4个隔离级别,以及解决的问题READUNCOMMITTED未提交读解决脏写READCOMMITTED提交读解决脏写、脏读REPEATABLEREAD可重复读解决脏写、脏读、不可重复读SERIALIAZBLE可串行化解决脏

MySQL的undo日志---MVCC前置知识

undo日志前面学习了redo日志,redo日志保证的是崩溃时事务持久性。我们可以从redo日志恢复到系统崩溃以前。undo日志就是为了保证事务回滚时事务所作所为都能回到事务执行前。保证了事务的原子性。redo把我们做增删改之前的状态记录下来,帮助MySQL回滚到事务执行之前的样子。这篇文章了解一下事务ID和undo日志产生就OK了,对于Undo日志存储可以直接略过。事务ID事务两种类型:只读事务,读写事务。针对于只读事务,MySQL会在其对用户创建的临时表进行增删改的时候才会为其分配事务ID,否则不分配。这里的临时表指的是createtemporary表名,和我们使用explainSQL的时

MySQL的undo日志---MVCC前置知识

undo日志前面学习了redo日志,redo日志保证的是崩溃时事务持久性。我们可以从redo日志恢复到系统崩溃以前。undo日志就是为了保证事务回滚时事务所作所为都能回到事务执行前。保证了事务的原子性。redo把我们做增删改之前的状态记录下来,帮助MySQL回滚到事务执行之前的样子。这篇文章了解一下事务ID和undo日志产生就OK了,对于Undo日志存储可以直接略过。事务ID事务两种类型:只读事务,读写事务。针对于只读事务,MySQL会在其对用户创建的临时表进行增删改的时候才会为其分配事务ID,否则不分配。这里的临时表指的是createtemporary表名,和我们使用explainSQL的时

MySQL之MVCC总结理解

前置知识涉及到的几个概念:隐藏字段,undolog,readview(每个表中的)隐藏字段:最后修改记录的事务id,回滚指针undolog:在插入/更新数据的时候记录回滚日志当前读:读取的是记录的最新版本,在执行的时候会加锁,防止其他并发事务修改该记录select...forupdate、update、insert、delete(排他锁)都是一种当前读快照读:读取的可能是记录的可见版本,可能是历史记录对MVCC理解:实现了事务隔离每次开启事务都会创建一个readview,以及回滚日志undolog,从而会形成一条回滚链关闭事务那么readview也会被关闭回滚日志何时被清除?如果read-vi