如果使用的是unsigned int 做的主键,如果你用完了,在insert直接就是报冲突的错误
碰到这种情况,只能进行修改字段的属性了,把他换成big unsigned 了,所以建表对字段定义的时候就需要判断好,是否会超过
对于隐藏的row_id来说的话,最大上限时2^48-1这个上限,然后就是直接从0开始插入,对于原来的会进行覆盖
mysql内部有一个global_query_id的全局变量,然后把他赋值给Query_id,对于变量+1,对于事务执行的第一条语句,还会把Query_id赋值给这个事务的Xid,,应为他是个内存变量,可能清空就没了,重新开始,然后Xid和redo log 和bin log是有关的,所以一般数据库重启之后很小概率会出现重复的,因为binlog文件会新建一个
有一个小知识点,对于只读事件,是不会给他trx_id的,这样的话,事件id的增加速度就不会那么快
如果发现trx_id的数字很大,就是通过,把当前事务的trx变量的指针地址转换成整数,然后加上2^48次方,这样在innodb_trx或者是innodb_locks的表中,只读事务的trx_id就会是一样的
,对于并发的只读事务,他们的trx变量的指针的地址肯定是不同的,这样的不同并发只读事务,查出来的trx_id就是不同的
就是用来区分读写事务的
线程id是只有四个字节,也就是最大是2^32-1的大小,如果不够了,那么就是循环,直到到达一个空的位置