0

我有一个带有自动增量主键的表,以及一个将 id 设置为 null 的插入,以便使用自动增量。这是我通常做的,是预期的行为并且工作正常。

使用一张表,我发现有时(并非总是)Mariadb 错误主键重复。即使我没有设置一个。但是,如果我再次运行完全相同的查询,它就可以正常工作。

定义的相关部分:

CREATE TABLE `Account` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `created` datetime DEFAULT NULL,
  `customer_id` bigint(20) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`customer_id`),
  FOREIGN KEY (`customer_id`) REFERENCES `Customer` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2558023 DEFAULT CHARSET=utf8

和插入:

INSERT INTO Account SET
id = NULL, created = '2021-09-27 14:57:28', customer_id = 2558019

抛出错误:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2558021' for key 'PRIMARY'

因此,当我指定 null (应该如此)但后来发现它是重复的(它不应该)时,它似乎试图使用 id 2558021 作为 PK。我可以看到 pk 2558021 在一分钟后为另一个客户插入。

我确实发现表定义上设置的自动增量低于最高 id。我认为这无关紧要,但我已经解决了。但问题还在继续。

我正在使用 mariadb 10.1.35 和 php 7.2。我没有使用交易。

我什至无法弄清楚这是怎么发生的。有什么bug吗?是否有一组奇怪的情况会导致这种情况?

4

1 回答 1

0

这是一个奇怪的问题,我仍然不知道是什么原因造成的,但我备份了表,将其删除并从备份中重新加载,情况似乎已经解决。也许有一些奇怪的表损坏或什么?

于 2021-09-29T12:01:42.500 回答