如何重新分配自动递增主键值
本文关键字:键值 何重新 分配 | 更新日期: 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。