GreatSQL社区

搜索

[已解决] show create table 看到的 AUTO_INCREMENT 会不断发生变化

782 4 2022-10-12 11:31
1.show create table 看到的 AUTO_INCREMENT 根据插入数据,会不断发生变化,意思是每次都需要修改表结构吗?

2.AUTO_INCREMENT  自增值,存放在哪里?

3.每次如何获取自增值?

全部回复(4)
yejr 2022-10-20 16:38:57
1、不需要修改表DDL信息;
2、8.0高版本中,会把自增ID信息持久化存储在redo log中;
3、每次insert完毕后,执行 last_insert_id() 即可,或者用 max() 函数;
王权富贵 2022-10-26 15:01:05
yejr 发表于 2022-10-20 16:38
1、不需要修改表DDL信息;
2、8.0高版本中,会把自增ID信息持久化存储在redo log中;
3、每次insert完毕后 ...

1.还是不清楚这里的 AUTO_INCREMENT 是怎么改变的?
CREATE TABLE `z` (
  `id` int NOT NULL AUTO_INCREMENT,
  `b` int DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb3

2. 所有表的自增id 都要存储到 redo吗?

3.last_insert_id()    指上次插入的自增id值,不同表插入自增id后,怎么保证,下次插入的就是当前表的下一个自增值
yejr 2022-10-27 10:19:45
wangb 发表于 2022-10-26 15:01
1.还是不清楚这里的 AUTO_INCREMENT 是怎么改变的?
CREATE TABLE `z` (
  `id` int NOT NULL AUTO_INCRE ...

问题1 & 2:
The current maximum auto-increment counter value is written to the redo log each time the value changes, and saved to an engine-private system table on each checkpoint. These changes make the current maximum auto-increment counter value persistent across server restarts.

详情戳 https://dev.mysql.com/doc/refman ... ement-handling.html
yejr 2022-10-27 10:21:04
wangb 发表于 2022-10-26 15:01
1.还是不清楚这里的 AUTO_INCREMENT 是怎么改变的?
CREATE TABLE `z` (
  `id` int NOT NULL AUTO_INCRE ...

问题3:
如果你想获取当前表最大id,见我上次的回复。

如果担心插入时会产生最大id值冲突,则大可不必,innodb会自行处理。
王权富贵

3

主题

0

博客

102

贡献

注册会员

Rank: 2

积分
128

助人为乐(铜)

合作电话:010-64087828

社区邮箱:greatsql@greatdb.com

社区公众号
社区小助手
QQ群
GMT+8, 2024-11-22 13:08 , Processed in 0.028421 second(s), 18 queries , Redis On.
快速回复 返回顶部 返回列表