如何重新分配自动递增主键值

本文关键字:键值 何重新 分配 | 更新日期: 2023-09-27 18:29:32

是否可以设置自动递增字段的值?如果删除了主键为5的记录,但当前的自动递增计数为10,有没有办法在主键仍为5(而不是11)的情况下重新插入该记录?我正试图用C#中的实体框架4.1来实现这一点。

如何重新分配自动递增主键值

我想你也可以使用

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

引自Tom Haigh

您可以删除主键列并重新创建它然后将被重新分配,我想是按照行的顺序插入。

然而,我不知道你为什么要这样做,尤其是如果你有其他表持有该表的外键。如果是,你也需要更新这些字段,在这种情况下,删除和重新创建列不是一个好的解决方案。你可以改为重新命名列,删除autoinc/主键属性,然后创建一个新的autoinc主键列。然后你会有两个可以用来更新此类外键的新旧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。