在SQL中更改PK值

时间:2014-01-16 12:01:55

标签: sql tsql

可能这个问题是重复的。我检查了这个问题的答案。但是没有一个能解决我的问题。最后我的问题就是这样。 我有一张像这样的人桌。 enter image description here 我想互相改变ID = 99980和ID = 99982。 ID是PK和自动增量。

3 个答案:

答案 0 :(得分:6)

你是说你想 - 改变它们?

如果是这样,你可以这样做:

UPDATE YOUR_TABLE
SET ID =
    CASE ID
    WHEN 99980 THEN 99982
    ELSE 99980
    END
WHERE ID IN (99980, 99982);

[SQL Fiddle]

  • 如果DBMS在SQL命令完成(Oracle和MS SQL Server)时强制执行约束,则此方法可以开箱即用。
  • 如果DBMS在命令执行期间强制执行约束,但也支持延迟约束,则可以通过延迟ID(PostgreSQL)上的密钥来使其工作。
  • 在不支持(MySQL)的DBMS上,您必须使用已知的未占用ID作为中介将其拆分为3个更新,例如:99980 - > -1,99982 - > 99980,-1 - > 99982

答案 1 :(得分:5)

具有相同效果的替代方法是更新两个记录之间不同的非键列:

UPDATE PERSON SET FIRST_NAME='Mary', Age=25 WHERE ID=99980
UPDATE PERSON SET FIRST_NAME='John', Age=45 WHERE ID=99982

答案 2 :(得分:1)

步骤1.重置自动增量属性&主键(将它们关闭)

步骤2.运行这些更新命令:

Update YourTableName SET  ID=99982 WHERE ID=99980

Update YourTableName SET  ID=99980 WHERE FIRST_NAME='Mary' AND ID=99982

步骤3.设置自动增量属性&再次使用主键(将它们打开)。

完成