MySql: AUTO_INCREMENT отсутствует в таблицах - PullRequest
0 голосов
/ 12 июля 2020

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

Ответы [ 2 ]

3 голосов
/ 12 июля 2020

Кто-то, должно быть, его изменил. Это изменение не происходит спонтанно.

Я могу воспроизвести это изменение самостоятельно:

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, иначе он вернется к значениям по умолчанию (т.е. не автоинкремент).

Так что я бы Это показывает, что кто-то выполнил ALTER TABLE и не забыл включить параметр столбца AUTO_INCREMENT.

1 голос
/ 12 июля 2020

Просто мысль.

Если у вас есть двоичные журналы, вы можете увидеть запрос на изменение в журналах и время его выполнения. :) Проверьте, включен ли двоичный журнал

show variable like 'log_bin';

Если двоичный журнал включен, найдите вероятный период, в течение которого запрос мог быть выполнен, а затем используйте mysqlbinlog , чтобы помочь вам найти это.

Если двоичный журнал не включен, невезение - как предполагалось в предыдущем сообщении Билла Карвина, mysql не меняет его сам по себе - кто-то, должно быть, изменил его.

...