表中缺少MySql:AUTO_INCREMENT

ekqde3dh  于 2023-03-17  发布在  Mysql
关注(0)|答案(3)|浏览(193)

MySql:AUTO_INCREMENT在运行大约一个月后从某些表中丢失。
初始:(显示创建表Foo)

CREATE TABLE `Foo` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) NOT NULL,
  `type` tinyint(2) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8

一个月后:

CREATE TABLE `Foo` (
  `id` bigint(20) NOT NULL,
  `name` varchar(10) NOT NULL,
  `type` tinyint(2) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

缺少AUTO_INCREMENT。原因是什么?
Mysql服务器版本:5.6.25,Linux操作系统

sulc1iza

sulc1iza1#

一定是有人改变了它。这种改变不是自发发生的。
我可以自己重现这个变化:

CREATE TABLE Foo ( id BIGINT AUTO_INCREMENT, ...

ALTER TABLE Foo MODIFY COLUMN id BIGINT;

SHOW CREATE TABLE Foo\G

*************************** 1. row ***************************
       Table: foo
Create Table: CREATE TABLE `foo` (
  `id` bigint(20) NOT NULL,
  `name` varchar(10) NOT NULL,
  `type` tinyint(2) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

现在该列显示它是BIGINT而不是AUTO_INCREMENT。
每次MODIFY COLUMN或CHANGE COLUMN时,必须重复所有列选项,如NOT NULL、AUTO_INCREMENT和DEFAULT,否则它将恢复为默认值(即 not auto-increment)。
所以我认为这表明有人执行了ALTER TABLE,但不记得包含AUTO_INCREMENT列选项。

b1zrtrql

b1zrtrql2#

只是一个想法。
如果您有二进制日志,您可能会在日志上看到alter查询以及它的运行时间。:)检查二进制日志是否由启用

show variable like 'log_bin';

如果启用了二进制日志,请查找可能执行查询的时间段,然后使用mysqlbinlog帮助查找。
如果没有启用二进制日志,运气不好--正如Bill Karwin之前的帖子所暗示的那样,mysql不会自己更改它--一定是有人更改了它。

yfjy0ee7

yfjy0ee73#

我也遇到了同样的情况。没有做任何涉及数据库更改的工作。没有其他人拥有数据库编辑权限。突然我收到用户投诉,AI在一个已经成功运行了7年/10 k插入的领域被关闭。Aurora(MySQL 5.6的AWS克隆)不是每个SE的MySQL。
至少这是一个面向管理层的表。害怕这种情况发生在客户事务表上。

相关问题