可能是這個問題是重複的。我檢查這個答案爲我的問題,但沒有解決我的問題。最後我的問題喜歡它。 我有一張喜歡它的人桌。 我想改變對方ID = 99980和ID = 99982。 ID是PK和自動增量。更改SQL中的PK值
回答
步驟1.重置自動遞增屬性&主鍵(把它們趕走)
步驟2.Run這些更新命令:
Update YourTableName SET ID=99982 WHERE ID=99980
和
Update YourTableName SET ID=99980 WHERE FIRST_NAME='Mary' AND ID=99982
步驟3.設定自動遞增屬性&主鍵再次打開(打開它們)。
完成
我正在嘗試。 – Zamir10
關閉一個關鍵(或任何其他)約束將允許它被併發事務觸發,所以在「正常」數據庫操作期間通常不建議這樣做。當你知道數據是「乾淨的」並且沒有併發的客戶端時,通常會在導入大量數據時暫時禁用約束來提高性能。 –
具有相同效果的另一種方法,是更新了兩個記錄之間不同的非鍵列:
UPDATE PERSON SET FIRST_NAME='Mary', Age=25 WHERE ID=99980
UPDATE PERSON SET FIRST_NAME='John', Age=45 WHERE ID=99982
如果我只知道ID值,我該怎麼辦? – Zamir10
在這種情況下,我喜歡@布蘭科的第一個建議 - http://stackoverflow.com/a/21161807/2084 –
有幾個這種解決方案需要注意的地方:(1)它不會,如果有一個備用鍵工作(可能不是這裏的情況)。(2)如果使用ON UPDATE CASCADE(Oracle不支持)通過FOREIGN KEY從另一個表中引用ID,則不會觸發該引用操作(可能需要也可能不需要)。 (3)在一般情況下,您必須有額外的步驟才能真正記住這些行中的值,否則在行被覆蓋後您不會知道它們是什麼。 –
你的意思是你想前 -change他們?
如果是這樣,你可以像這樣做:
UPDATE YOUR_TABLE
SET ID =
CASE ID
WHEN 99980 THEN 99982
ELSE 99980
END
WHERE ID IN (99980, 99982);
- 這工作外的框,如果DBMS的強制約束,當SQL命令完成(Oracle和MS SQL Server)。
- 如果DBMS在命令執行期間強制約束,並且還支持延遲約束,則可以通過推遲ID(PostgreSQL)上的密鑰來使其工作。
- 在支持既不(MySQL的)一個DBMS,你將不得不將其使用公知的未使用的ID作爲中介,被劃分到3個的更新例如:99980 - > -1,99982 - > 99980,-1 - > 99982.
- 1. 更新PK值mysql
- 2. 更改我在表中的PK
- 3. SQL更改值
- 4. 在SQL中更改PK,由於FK而不起作用
- 5. 如何從訪問表中更改PK?
- 6. SQL Server:更改索引的文件組(也是PK)
- 7. SQL Server更改float的值
- 8. SQL Server更改列的值
- 9. sql服務器將PK類型從int更改爲uniqueidentifier
- 10. SQL:如何複製行,並更改字段(PK)
- 11. 更改SQL Server 2005中的主鍵值
- 12. 更改SQL Server 2012中的默認值
- 13. JSP - 更改SQL數據庫中的值
- 14. 更改SQL表中的性別值
- 15. 將行值更改爲SQL中的列
- 16. 將表中的SQL SQL Pyspark更新值更改爲表中的另一個值
- 17. mysql:如何將列更改爲PK Auto_Increment
- 18. SQL注入|更改ID值
- 19. SQL case語句更改值
- 20. RDS Postgres更改SQL log_statement值
- 21. SQL替換爲更改值
- 22. SQL - 如何更改值
- 23. SQL查詢更改行值
- 24. 更改FK爲空值,如果其中包含了PK的表被刪除
- 25. 獲得PK值
- 26. SQL Server的PK問題
- 27. 當更改MySQL中的PK自動增量時,「表已存在」
- 28. SQL Server中PK的最佳實踐
- 29. t-sql十進制賦值更改值
- 30. 重命名錶SQL Server,通過PK和FK的級聯該更改
你的問題被標記爲'tsql'和'oracle',但Oracle使用PL/SQL,而不是T-SQL。 –
在身份列和主鍵中不能有兩個具有相同ID的記錄。您可以更新PK字段中的值,但不應該重複。由於您嘗試的數據是重複的,因此無法實現此目的。 – Murtaza
感謝賈斯汀斯基爾斯。我更新。 – Zamir10