【问题标题】:Auto Increment has been reset back to 1 automatically自动增量已自动重置回 1
【发布时间】:2019-08-25 23:51:27
【问题描述】:

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

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

但现在我注意到,在表 project_queues 中,autoIncrement 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.3MariaDB 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

但我不认为这些与人工智能有关。

【问题讨论】:

标签: mysql sql ruby-on-rails mariadb


【解决方案1】:

Auto_increment 可以通过更新来重置。由于您将其用作队列,我想您不会进行更新,但值得一问。

另外,你使用什么表实现,MyIsam,InnoDB,其他...?

【讨论】:

  • 不,我不使用更新,只使用插入和删除。表实现 ENGINE=InnoDB.
【解决方案2】:

好吧,我找到了问题(这是 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

我将尝试找到一些解决方法来解决此问题,但我认为这会对许多引用某些存档表或类似内容的用例造成严重破坏。

参考文献

【讨论】:

    【解决方案3】:

    已解决

    我已将10.1.29-MariaDB MariaDB Server 升级为10.2.8-MariaDB MariaDB Server

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

    【讨论】:

    • 还有 MySQL 8.0。
    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多