自动增量已自动重置为1

时间:2019-04-04 09:23:36

标签: mysql sql ruby-on-rails mariadb

我刚遇到一个我无法解决的问题。

我有一个数据库表project_queues用作队列,我在其中存储一些记录。处理记录后,它们将被删除。 删除由Rails构建record.destroy在一个循环中触发,该循环在MySql数据库上触发DELETE record FROM table

但是现在我注意到,在表project_queues中, autoIncrement Id (主键)已设置回 1 < / strong>。 (这损坏了我在审计表中的引用。同一记录现在指向多个不同的项目队列)

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

但是我不认为这些与AI有关。

3 个答案:

答案 0 :(得分:1)

好的,我发现了问题(这是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 :(得分:1)

已解决

我已将10.2.8-MariaDB MariaDB Server升级到?ssl=true&authSource=admin

版本> = 10.2.4解决了自动增量值的重置

答案 2 :(得分:0)

可以通过更新重置自动增量。由于您将其用作队列,我想您不进行更新,但是值得一问。

此外,您使用MyIsam,InnoDB等其他表实现是什么?