数据库事务id

目录

一、事务简介

二、事务id

1、分配方式:

只读事务分配

读写事务分配

2、分配方法

3、记录的隐藏列


一、事务简介

事务可以分为只读事务和读写事务。

~start transaction read only语句开启只读事务

        只读事务不可以对普通的表进行增删改,但是可以对临时表做增删改操作。

~start transaction read write语句开启读写事务,或者使用begin、start transaction语句默认开启读写事务。

二、事务id

某个事务执行过程中对某个表执行了增删改,mysql机会给他分配一个独一无二的事务id。

1、分配方式:

只读事务分配

对于只读事务来说,只有在第一次对某个用户创建的临时表执行增删改操作时才会为这个事务分配一个事务id。否则不会分配事务id。

注意:explain查看执行计划时extra出现using temporary提示。这个表明在执行查询语句的时候会用到内部临时表,这个所谓的内部临时表和我们手动用create temporary table创建的用户临时表并不一样,在食物回滚的时候不需要把执行select语句过程中产生的内部临时表页回滚,在执行select语句用到内部临时表时并不会为他分配事务id。

总结:系统创建的内部临时表不会,用户创建的临时表会。

读写事务分配

对于读写事务来说,只有第一次对表(包括用户创建的临时表)进行增删改才会生成事务id,否则不会生成。

2、分配方法

事务id就是一个数字,和对隐藏列row_id分配策略相似。

1)内存维护一个全局变量,要被分配的时候,就把这个变量的值当做事务id分配给事务id,之后变量自增1。

2)当这个变量是256的倍数的时候,把这个变量放到系统表空间页号为5的页面中。

3)每当服务器下次重新启动的时候,就从页号为5的页面中拿出值加上256后,赋值给内存的全局变量。(这样是为了防止上次关机的时候,事务id自增的比上次存的256倍数要多)

3、记录的隐藏列

这张图不知道还熟不熟悉,记录除了会保存完整的用户记录还会保存隐藏列,这三个列分别是可以不存在的row_id(用户记录定义了主键),还有trx_id,就是保存事务id的,保存更改这个记录的语句的事务的事务id。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值