Автоинкремент был сброшен до 1 автоматически - PullRequest
3 голосов
/ 04 апреля 2019

Я только что столкнулся с проблемой, которую не могу решить.

У меня есть таблица базы данных project_queues, которая используется в качестве очереди, где я храню некоторые записи. Когда записи обрабатываются, они удаляются. Удаление вызывается конструкцией рельсов record.destroy в цикле, который запускает DELETE record FROM table в базе данных MySql.

Но теперь я заметил, что в таблице project_queues автоинкремент Id (первичный ключ) был установлен обратно в 1 . (Это повредило мои ссылки в таблице аудита. Одна и та же запись теперь указывает на несколько разных очередей проекта)

show create table project_queues;

CREATE TABLE `project_queues` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
   ...
   ...
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 

Я не использую TRUNCATE project_queues, не удаляю конструкцию таблицы и не создаю ее снова в коде.

Кто-нибудь сталкивался с подобной проблемой, как я? Я не могу найти никаких аномалий в журнале.

Я использую Rails 5.2.3 , MariaDB 10.1 .

Соединение между приложением и базой данных обеспечивает следующие режимы SQL:

  • NO_AUTO_VALUE_ON_ZERO
  • STRICT_ALL_TABLES
  • NO_AUTO_CREATE_USER
  • NO_ENGINE_SUBSTITUTION
  • NO_ZERO_DATE
  • NO_ZERO_IN_DATE
  • ERROR_FOR_DIVISION_BY_ZERO

Но я не думаю, что это как-то связано с ИИ.

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Хорошо, я нашел проблему (это известная проблема с 2013 года).

Вот как воспроизвести проблему.

# Your MariaDB Server version: 10.1.29-MariaDB MariaDB Server
# Engine InnoDB

create database ai_test;
use ai_test;

CREATE TABLE IF NOT EXISTS ai_test(id INT AUTO_INCREMENT PRIMARY KEY, 
                                   a VARCHAR(50));

show table status like 'ai_test' 
  >  Auto_increment: 1

INSERT INTO ai_test(a) VALUES ('first');
INSERT INTO ai_test(a) VALUES ('second');
INSERT INTO ai_test(a) VALUES ('third');

show table status like 'ai_test' 
  >  Auto_increment: 4

MariaDB [ai_test]> Delete from ai_test where a = 'first';
MariaDB [ai_test]> Delete from ai_test where a = 'second';
MariaDB [ai_test]> Delete from ai_test where a = 'third';

show table status like 'ai_test' \G
  >  Auto_increment: 4

# Restart Server
sudo service rh-mariadb101-mariadb stop
sudo service rh-mariadb101-mariadb start

show table status like 'ai_test' \G
  >  Auto_increment: 1

Я попытаюсь найти обходной путь для решения этой проблемы, но я думаю, что это приводит к хаосу во многих случаях использования, которые относятся к некоторым архивным таблицам или что-то в этом роде.

Рекомендации :

1 голос
/ 04 апреля 2019

Решено

Я обновил 10.1.29-MariaDB MariaDB Server до 10.2.8-MariaDB MariaDB Server

Версия> = 10.2.4 решил сброс значения автоинкремента

0 голосов
/ 04 апреля 2019

Auto_increment может быть сброшен обновлениями.Поскольку вы используете его в качестве очереди, я полагаю, вы не производите обновления, но стоит спросить.

Кроме того, какую реализацию таблиц вы используете, MyIsam, InnoDB, другие ...?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...