mysql - 自动增量已自动重置回 1
问题描述
我刚刚遇到了一个我无法解决的问题。
我有一个project_queues
用作队列的数据库表,其中存储了一些记录。当记录被处理时,它们被删除。删除是由 Rails 构造在MySql 数据库上record.destroy
触发的循环中调用的。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.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
但我不认为这些与人工智能有关。
解决方案
好吧,我发现了问题(这是 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
我会尝试找到一些解决方法来解决这个问题,但我认为这会对许多引用一些存档表或类似内容的用例造成严重破坏。
参考资料:
推荐阅读
- python - 在这段代码中,我得到 UnboundLocalError: local variable 'click' referenced before assignment。我不知道为什么?
- javascript - next.js、javascript、graphql、react js 中的 Apollo 客户端问题
- javascript - 如何将两个函数添加到一个事件监听器
- pycharm - .rc 文件的 PyCharm 文件类型关联(语法高亮)
- c++ - 如何在合并排序中计算比较和交换(反转)?[C++]
- swift - 当应用程序在后台时扫描外围设备(例如屏幕锁定时)
- html - 在小视口中更改导航栏链接的悬停颜色(在汉堡包下)
- pytorch - 为什么训练 10 个 epoch 后我的准确率没有提高?
- rust - 如何为 openssl::ssl::SslStream 创建一个 BufReader?
- json - 如何使用嵌套 JSON 对象从 API 响应导入 Google 表格