簡體   English   中英

如何重新分配自動增量主鍵值?

[英]How can I re-assign an auto-increment primary key value?

是否可以設置自動增量字段的值? 如果使用主鍵5刪除記錄,但當前的自動增量計數為10,是否有任何方法可以重新插入該記錄,其主鍵仍保持為5(而不是11)? 我試圖用C#中的Entity Framework 4.1來做這件事。

我想你也可以用

Set Identity_Insert TableName ON 
 Update your Id value
Set Identity_Insert TableName OFF

引自Tom Haigh的話

您可以刪除主鍵列並重新創建它。 然后將重新分配所有ID,我假設按行插入的順序。

但是,我不確定你為什么要這樣做,特別是如果你有其他表持有該表的外鍵。 如果是這樣,您還需要更新這些字段,在這種情況下,刪除和重新創建列將不是一個好的解決方案。 您可以改為重命名該列,刪除autoinc / primary key屬性,然后創建一個新的autoinc主鍵列。 然后,您將擁有可用於更新此類外鍵的舊ID和新ID。

您可以禁用身份規范 您的主鍵將保持不變,但您可以插入具有您選擇的ID的新記錄。 插入記錄后,您需要重新啟用身份規范。

雖然這里提出了一些很好的建議,但在處理這個問題的解決方案時我才意識到了一些事情。 數據庫是MySQL的披露可能會對此有所幫助,但我當時沒有意識到差異會如此之大。 事實上,在MySql中沒有鎖定插入自動增量主鍵。 因此,此代碼用於插入主鍵小於自動增量索引的當前值的記錄:

        var sql = @"INSERT INTO Work (
            WorkId ,
            LotId ,
            Description ,
            )
            VALUES (
            '5',  '5', 'This Works'
            );";
        using (var db = new Context())
        {
            db.Database.ExecuteSqlCommand(sql);
        }

正確插入索引為5的記錄,即使當前的自動增量計數為11。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM