自定义自动增值不起作用

kyxcudwk  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(418)

我有下面的sql代码来创建一个表

CREATE TABLE db.object (
  `objid` bigint(20) NOT NULL AUTO_INCREMENT,
  `object_type` varchar(32) NOT NULL,
  PRIMARY KEY (`objid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

但是,对象中的值显示为1,2,3(insert语句没有添加ID)
不应该 AUTO_INCREMENT=2 使对象从2开始,而不是从1开始

m0rkklqb

m0rkklqb1#

可能吧。在innodb表上,auto inc有足够多的例外和问题,因此它必须敦促对文档进行全面的审查。
也就是说,我可以想到一个场景,mysql忽略了初始值设定项的值。我将引用文档:
只要服务器运行,innodb就使用内存中的自动递增计数器。当服务器停止并重新启动时,innodb会重新初始化每个表的计数器,以便第一次插入到表中,如[此处]所述:
innodb在重新启动后第一次插入到包含自动增量列的表中时,执行与以下语句等效的语句: SELECT MAX(ai_col) FROM table_name FOR UPDATE; 服务器重启也会取消create table和alter table语句中的auto\u increment=n table选项的效果,您可以将其与innodb tables一起使用,以设置初始计数器值或更改当前计数器值。
因此,如果您创建该表,然后重新启动服务器(就像作为部署过程的一部分),您将获得一个很好的值 1 对于第一行。如果要取消此命令,则需要创建表,然后插入具有所需auto inc值的虚拟行,然后重新启动,然后删除虚拟行。

2izufjch

2izufjch2#

对于innodb表 AUTO_INCREMENT 打开表时,值将重置为最大值(加1)。自动增量值只存在于内存中,不会持久存在于磁盘上。
例如,当mysql示例关闭后重新启动,并且引用了表时,就会发生表打开的情况。
表也可以在其他时间关闭。例如,当 open_table_cache 超过时(即当打开大量其他表时),mysql将关闭一些打开的表,以便在缓存中为新打开的表腾出空间。
我相信这个行为在mysql参考手册的某个地方有记录。

s71maibg

s71maibg3#

我使用了您的sql,创建了object表并为 object_type 以及 objid 从2点开始。看不出这里有什么不对。。。

相关问题