如何更新复合主键的一部分?

faf*_*row 2 php mysql drupal

我有一个使用 CCK 内容字段来存储其大部分数据的 drupal 站点。

我想手动更改一些数据以指向不同的节点版本。

UPDATE content_field_table SET vid = '1234' WHERE nid = '12' AND vid = '123';
Run Code Online (Sandbox Code Playgroud)

问题是 content_field_table 有一个复合主键

PRIMARY KEY (`vid`,`delta`)
Run Code Online (Sandbox Code Playgroud)

因此,当我运行更新语句时,出现以下错误:

错误代码:1062 密钥“PRIMARY”的重复条目“52979-0”

如何根据需要更新视频?

Con*_*rix 5

主键必须是唯一的。因此,您不能将一条记录更改为与现有记录具有相同的 PK

例如,如果您从下面的 SQL 中获得任何记录,则无法完成您要执行的更新。您需要先进行一些其他更改或删除记录或删除 PK

SELECT SOURCE.delta, 
       SOURCE.vid, 
       TARGET.delta, 
       TARGET.vid 
FROM   content_field_table SOURCE 
       INNER JOIN content_field_table TARGET 
         ON SOURCE.delta = TARGET.delta 
WHERE  SOURCE.vid = '123' 
       AND TARGET.vid = '1234' 
Run Code Online (Sandbox Code Playgroud)