键 'PRIMARY' 的重复条目 [...]

Duplicate entry [...] for key 'PRIMARY'

我在 oxid eshop 4.7 中更新 table oxseo 时遇到了一个奇怪的行为。

table oxseo 具有以下架构:

+------------+---------+----------+----------+----------+----------+-------+
| OXOBJECTID | OXIDENT | OXSHOPID | OXLANGID | OXSTDURL | OXSEOURL | [...] |
+------------+---------+----------+----------+----------+----------+-------+

并且在字段上有一个主键(这也是键名):

+---------+----------+--------+
| OXIDENT | OXSHOPID | OXLANG |
+---------+----------+--------+

并且我尝试通过 linux shell:

UPDATE oxseo
SET
  OXIDENT = "8e4b0ac7[...]",
  OXSEOURL = "my/seo/url/"
WHERE
  OXOBJECTID = "123"`

导致错误:

ERROR 1062 (23000): Duplicate entry '8e4b0ac7[...]-oxbaseshop-0' for key 'PRIMARY'`

但是,当使用 phpMyAdmin 在整个 table 中查找字符串 8e4b0ac7[...] 时,没有返回任何行。尽管如此,我还是使用

手动检查了
SELECT * FROM field1 = hash
SELECT * FROM field2 = hash

等等。

有人知道原因是什么吗?

很简单。无论该更新语句试图做什么,都会使 table 处于 PRIMARY 键中具有重复条目(2 行或更多行)的状态,如 show create table oxseo.

的输出所示

那个主键可能在单列上,也可能是复合(多列)键。

数据库引擎禁止它,因为模式禁止它。