gpt4 book ai didi

mysql - 如何使 InnoDB 表在服务器重启时不重置自动增量?

转载 作者:可可西里 更新时间:2023-11-01 07:16:24 25 4
gpt4 key购买 nike

我的开发机器上运行着 MySQL 5.5.37。我使用 innodb 表。面临下一个问题 - 服务器重启后自动增量重置。

找到 autoinc_lock_mode , 设置为 0,但没有帮助。

SHOW VARIABLES 命令显示 autoinc_lock_mode 的值 0。

我的工作:

select max(id) from tablex; // 11, autoincrement is 12
insert into tablex values ('foo');
select max(id) from tablex; // 12, autoincrement is 13
delete from tablex where id > 11; // autoincrement is 13

然后我重新启动服务器……然后……(鼓声)

show create table tablex; // autoincrement 12 instead of 13

我做错了什么? :(

//更新

我必须使用 MyISAM 表。感谢大家的回复/评论。

最佳答案

在 InnoDB 中,自动增量值不是表元数据的一部分,并且会在每次服务器重启时重置。

InnoDB uses the following algorithm to initialize the auto-increment counter for a table t that contains an AUTO_INCREMENT column named ai_col: After a server startup, for the first insert into a table t, InnoDB executes the equivalent of this statement:

SELECT MAX(ai_col) FROM t FOR UPDATE

; InnoDB increments the value retrieved by the statement and assigns it to the column and to the auto-increment counter for the table. By default, the value is incremented by one. This default can be overridden by the auto_increment_increment configuration setting.

If the table is empty, InnoDB uses the value 1. This default can be overridden by the auto_increment_offset configuration setting.

在服务器可执行文件的生命周期中,它存储在一个特殊的结构中,但不会在服务器重启之间持续存在:

If you specify an AUTO_INCREMENT column for an InnoDB table, the table handle in the InnoDB data dictionary contains a special counter called the auto-increment counter that is used in assigning new values for the column. This counter is stored only in main memory, not on disk.

您设置的变量定义了不同 session 同时访问此结构的方式,而不是其生命周期。

如果你想在服务器重启之间保留一个自动增量值,你应该将它保存在一个不受事务控制的表中(比如 MyISAMArchive)每次写入并在服务器重启时从表中重置它。

关于mysql - 如何使 InnoDB 表在服务器重启时不重置自动增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com