是否可以设置自增字段的值?如果使用主键5删除了记录,但是当前的自增计数为10,是否有办法重新插入该记录,并使其主键仍然保持在5(而不是11)?我正在尝试使用C#中的Entity Framework 4.1完成此操作。
是否可以设置自增字段的值?如果使用主键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 primary key列。然后,您将同时拥有旧和新的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);
}
即使当前的自增计数为11,也要将记录正确地插入到索引为5的位置。
异常详细信息:MySql.Data.MySqlClient.MySqlException: 未知系统变量'Identity_Insert'
。 - Travis Jdb.Database.ExecuteSqlCommand("Set Identity_Insert Work Insert ON");
- Travis J