阅读本文大概需要2分钟
我们通常会把主键设置成自增id,主键id的最大值是
(bigint unsigned)。如果主键id用完了的话,再次插入的时候会报错
Duplicate entry for key 'PRIMARY'
如果创建的表使用InnoDB引擎,但是没有指定主键的话。InnoDB会创建一个不可见,长度为6个字节的row_id。
InnoDB维护了一个全局变量dict_sys.row_id,所有无主键的InnoDB表,每插入一行数据,会将当前时刻的dict_sys.row_id 赋值给row_id,然后自增1。
row_id 的上限是
,row_id 达到上限后,会归0,然后重新循环,则新插入的数据会覆盖之前的数据(如果row_id一致)。
trx_id, 事务id。InnnoDB内部维护max_trx_id全局变量,每次申请trx_id 获取当前的max_trx_id 然后会将max_trx_id 加1。
每一行数据会记录更新它的trx_id, MVCC的实现原理就是根据当前的trx_id 和数据持有的trx_id 做比较来判断数据是否可见。
max_trx_id 的上限是
,如果达到上限后就会归0, 那么之后的查询操作会出现脏读。
线程id,系统有一个全局变量thread_id_counter, 新建连接之后会将当前的thread_id_counter赋值给新建的连接。
thread_id_counter的上限是
, 达到上限后会重置为0。