标签:事务 删除 记录 mysql 创建 MVCC 详解 MySQL id
1、原理简单说明
MySQL底层还有几个隐藏字段,比如类似创建事务id、删除事务id
id | name | balance | 创建事务id | 删除事务id |
1 | zhangsan | 450 | 10 | 13 |
2 | wangwu | 600 | 11 | 空 |
2 | wangwu888 | 600 | 13 | 空 |
ps-注意:这个时候创建了查询快照,记录执行sql这一刻最大的已提交事务id(快照点已提交最大事务id)
比如现在开启事务,事务id为13,
①、先删除id=1的记录
②、然后更新id=2的记录,
③、再提交对于删除操作。
mysql底层会记录好被删除的数据行的删除事务id,
对于更新操作 mysql底层会新增一行相同数据并记录好对应的创建事务id
在id为12的事务里执行查询操作mysql底层会带上过滤条件,创建事务id <= max(当前事务id(12),快照点已提交最大事务id),删除事务id> max(当前事务id(12),快照点已提交最大事务id)
通俗的讲:对于上表中的数据是这么来的。
①开始事务,插入了name为zhangsan的数据,事务id为10,此时就会记录创建事务id为10,提交事务
②开始事务,插入了name为wangwu的数据,事务id为11,此时就会记录创建事务id为11,提交事务
③开始事务,更新wangwu这条记录为wangwu666。MySQL底层实际上并不是直接修改了最终数据,而是会生成一条新的记录(PS:这里生成新的记录并不是指真的在我们的数据表里面插入一条记录,而是mysql自己维护的,每更新一次就会有一条新数据)。新数据的id和原来数据的id是一样的,也会有一个创建事务的id,此时事务的id为13,所以记录的为13。
接着在该事物中删除name为zhangsan的数据,这个时候就记录删除事务id为13
注意:begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作InnoDB 表的语句,事务才真正启动,才会向mysql申请事务id,mysql内部是严格按照事务的启动顺序来分配事务id的
标签:事务,删除,记录,mysql,创建,MVCC,详解,MySQL,id 来源: https://blog.csdn.net/sxl123sxl/article/details/118395467
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。