我使用幾個帶整數主鍵的引用表。現在我想將整數更改爲GUID,並保持所有引用完好無損。最簡單的方法是什麼?從整數移動到GUID作爲主鍵
謝謝!
加成
我明白一般的過程,所以我需要更詳細的建議,例如,如何填寫新的GUID列。使用默認值newid()是正確的,但對於已經存在的行是什麼?
我使用幾個帶整數主鍵的引用表。現在我想將整數更改爲GUID,並保持所有引用完好無損。最簡單的方法是什麼?從整數移動到GUID作爲主鍵
謝謝!
加成
我明白一般的過程,所以我需要更詳細的建議,例如,如何填寫新的GUID列。使用默認值newid()是正確的,但對於已經存在的行是什麼?
此外,留有一定的空間在您的數據/索引頁(指定填充因子< 100)GUID是不連續的,比如說int標識列。這意味着插入可以在數據範圍內的任何地方,並且如果您的頁面100%已滿,將導致頁面拆分。
首先:親愛的上帝爲什麼?!?!?其次,你將不得不首先將GUID列添加到所有表中,然後根據int值填充它們。完成後,您可以將GUID設置爲主鍵/外鍵,然後刪除int列。
,以更新要像做
。
UPDATE foreignTable f
SET f.guidCol = p.guidCol
FROM primaryTable p
WHERE p.intCol = f.intCol
我同意格倫。我會堅持使用PK的整數。如果您需要更多記錄,請使用bigint。如果您需要全局標識符,請使用類似於URI的內容作爲輔助鍵,並使用PK的整數。 – 2008-09-26 07:45:44
但是如何在主鍵表中設置新的GUID? – 2008-09-26 08:24:26
2 Alexander Prokofyev:將所有「guid」PK列的默認clausule設置爲「newid()」。 2 marxidad:如果您需要在另一個環境(例如winforms應用程序)中創建級聯記錄,則使用Guid而不是(big)int非常有用。 – TcKs 2008-09-26 08:43:11
是的,我與格倫...我其實是在猶豫張貼同樣的事情,他發佈之前....
爲什麼你會不希望自動增量int主鍵分開從你的GUID?它的很多更靈活,你可以有GUID列索引,以便你有你的查詢性能好...
至於靈活性,我喜歡讓我的ID是自動增量整數,因爲這樣其他看似獨特的主鍵值得一提的項目可以改變。
靈活性的一個很好的例子是如果您使用用戶名作爲主鍵。即使它們是獨一無二的,它也能很好地改變它們。如果用戶使用電子郵件地址作爲用戶名會怎麼樣?能夠更改用戶名並使其不會影響您的所有查詢是一大優勢,我懷疑您的GUID也可能是這樣的......
我認爲,您必須手動操作。或者你可以爲它寫一些實用程序。該場景應該是:
這是相關係統,實現分佈式計算模型。如果系統在系統中持久存儲信息時需要知道主鍵,則使用由處理器維護的自動遞增主鍵會減慢系統運行速度。相反,您需要像GUID生成器這樣的機制來創建主鍵(請記住,主鍵的真正特徵是其唯一性)。所以,我可以擴展多個服務,每個服務都獨立於彼此創建主鍵。
我之前有過這樣做的可疑特權,基本上我所要做的就是將整個該死的數據庫導出到XML中。接下來,我有一個Java應用程序,它使用java.util.Random的nextLong()函數將主鍵替換爲新的guid鍵。之後,我將整個事情導入數據庫。
當然,我第一次嘗試導入XML文件時,我忘記關閉主鍵字段的自動編號功能,所以請從我的錯誤中學習。我確信有更好的方式來做到這一點,但這是一種快速而骯髒的做法......並且它很有效。如果你想知道,該項目是爲了使應用程序規模。
滑稽,我想我需要做的,因爲另一個問題正好相反......
How can use SQLBulkCopy on a table with a GUID primary key and default newsequentialid()?
這是一個非常不錯的選擇。我從一個應用程序切換到UUID,我不後悔。如果您使用MS SQL Server,它將包含在標準中(我使用postgresql,它只包含在8.3以上的標準中)。
與Glenn Slaven一樣,您可以使用當前記錄中的鍵重新創建UUID。請注意,它們不會是唯一的,但這樣很容易保持關係不變。移動後創建的新記錄將是唯一的。
不要這樣做!我們開始使用GUID,現在我們幾乎完成了作爲PK的INTs;我們保留了用於記錄目的的GUID(以及某些表格,呃,「可協商的關係完整性」)),但是使用整數的速度增加是驚人的。
這隻有當表格行數跨越數百萬時才真正顯現出來,介意你。
我們迄今爲止最大的愚蠢是使用NEWID()作爲我們的(順序)對數表的PK - 當我們意識到我們的錯誤時,我們有很多頭疼的事情。
作爲未來讀者的**警告**:僅在_careful_考慮之後應用uniqueidentifiers(GUID)作爲主鍵:通常這不是一個好主意。 – DdW 2017-02-08 08:44:11