MySql:表中缺少 AUTO_INCRMENT

问题描述 投票:0回答:4

MySql:运行大约一个月后,某些表缺少 AUTO_INCRMENT。

最初:(显示创建表 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

缺少自动增量。是什么原因?

Mysql服务器版本:5.6.25,Linux

mysql auto-increment
4个回答
2
投票

一定是有人改变了它。这种变化不会自发发生。

我可以自己重现此更改:

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_INCRMENT。

每次修改列或更改列时,都必须重复所有列选项,例如 NOT NULL 和 AUTO_INCRMENT 和 DEFAULT,否则它将恢复为默认值(即 not 自动增量)。

所以我会解释这表明有人做了 ALTER TABLE 并且不记得包含 AUTO_INCRMENT 列选项。


1
投票

只是一个想法。

如果您有二进制日志,您可能会在日志上看到更改查询及其运行时间。 :) 检查二进制日志是否启用

show variable like 'log_bin';

如果启用了二进制日志,找到可能执行查询的时间段,然后使用 mysqlbinlog 来帮助您找到它。

如果未启用二进制日志,那么运气不好 - 正如 Bill Karwin 之前的文章所建议的那样,mysql 不会自行更改它 - 一定是有人更改了它。


0
投票

我的情况也完全一样。不做任何涉及数据库更改的工作。没有其他人具有数据库编辑权限。突然,我收到了用户抱怨,人工智能在一个已经成功运行了七年/10k 插入的领域被关闭了。 Aurora(MySQL 5.6 的 AWS 克隆)不是 SE 的 MySQL。

至少这是一张面向管理层的桌子。害怕客户交易表发生这种情况。


0
投票

是的,我也遇到过。仅在我的开发机器上,所以还不是灾难。我认为当系统崩溃或者可能是当机器只是关闭但MySql尚未首先关闭时它可以这样做。 它过去从未发生过曾经。玛丽亚数据库 10.4.27

© www.soinside.com 2019 - 2024. All rights reserved.