我刚遇到一个我无法解决的问题。
我有一个数据库表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模式:
但是我不认为这些与AI有关。
答案 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)
答案 2 :(得分:0)
可以通过更新重置自动增量。由于您将其用作队列,我想您不进行更新,但是值得一问。
此外,您使用MyIsam,InnoDB等其他表实现是什么?