在SQL中更改PK值

Zam*_*mir 1 sql t-sql

可能这个问题是重复的.我检查了这个问题的答案.但是没有一个能解决我的问题.最后我的问题就是这样.我有一张像这样的人桌. 在此输入图像描述 我想互相改变ID = 99980和ID = 99982.ID是PK和自动增量.

Bra*_*vic 6

你的意思是你想 -改变呢?

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

UPDATE YOUR_TABLE
SET ID =
    CASE ID
    WHEN 99980 THEN 99982
    ELSE 99980
    END
WHERE ID IN (99980, 99982);
Run Code Online (Sandbox Code Playgroud)

[SQL小提琴]

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


Ian*_*son 5

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

UPDATE PERSON SET FIRST_NAME='Mary', Age=25 WHERE ID=99980
UPDATE PERSON SET FIRST_NAME='John', Age=45 WHERE ID=99982
Run Code Online (Sandbox Code Playgroud)