自增ID用完怎么办

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23864697/article/details/88286888

      自增ID因为存在类型而存在上限

      一  表定义自增ID值

           达到上限后,再申请一个ID时,值保持不变,最后报主键冲突           

create table t(id int unsigned auto_increment primary key) auto_increment=4294967295;
insert into t values(null);
// 成功插入一行 4294967295
show create table t;
/* CREATE TABLE `t` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4294967295;
*/

insert into t values(null);
//Duplicate entry '4294967295' for key 'PRIMARY'

      二 InnoDB系统自增row_id

           达到上限之后,从新开始写,写的时候如果存在,则覆盖

           

      三 Xid

          Mysql 内部维护了一个全局变量global_query_id,每次执行都将把它赋值给query_id,然后给这个变量加1,如果当前语句是这个事务执行的第一个语句,还会赋值给这个事务的Xid。

          global_query_id重启之后清0;

         理论上,同一个binlog里是不会出现同一个Xid的情况

         理论不存在(因为2的64次方太大了):

            1 执行一个事务,假设Xid是A 

            2 接下来执行2的64次查询,让global_query_id回到A

            3 再启动一个事务,这个事务的Xid也是A

      四 Innodb trx_id

      五 thread_id

           达到上限的时候,重置为0.然后继续增加,但是不会重复

do {
  new_id= thread_id_counter++;
} while (!thread_ids.insert_unique(new_id).second);

                 

猜你喜欢

转载自blog.csdn.net/qq_23864697/article/details/88286888
今日推荐