繁体   English   中英

删除表中的行时如何更新autoincremented id?

[英]How to update autoincremented id when delete row in table?

我正在创建在C#中使用MYSQL数据库的应用程序。 我想在表中删除行并更新id的自动增量值。 例如,我有两列的表:id和station,table是station list。 像这样的东西

id站
1 pt1
2 pt2
3 pt3

如果我删除第二行,删除表后看起来像这样:

id站
1 pt1
3 pt3

有没有什么方法可以更新表的id,对于这个例子,第三行中的id而不是值3的值是否为2? 提前致谢!

我建议您在删除行时不要做任何特殊操作。 是的,你会在ids中留下空白,但为什么要关心? 这只是一个身份证。

如果更改id_station的值,则还需要更新具有id_station字段的所有表中的值。 它会导致更多不必要的更新。

根据定义,不应手动更改自动增量列。
如果其他一些表使用此ID(3)作为外键来引用此表中的记录,会发生什么? 该表应相应更改。
(想想看,在你的例子中很简单,但如果在max(ID)为100000的表中删除ID = 2会发生什么?主表和引用表中有多少次更新?)

如果你的编号有差距,最后也没有问题。

更改其他行中id列的值的唯一方法是使用UPDATE语句。 没有内置机制来完成你想要的东西。

我同意这里的其他答案; 通常,删除行时,我们不会更改其他行中的id列的值。 通常,该id列是主键,理想情况下,该主键值是不可变的(它被分配一次并且不会更改。)如果它确实发生了更改,那么对它的任何引用也需要更改。 (对于外键,ON UPDATE CASCADE会将更改传播到子表,对于支持外键的InnoDB等存储引擎,但不支持MyISAM。

基本上,更改id值会导致比解决的问题更多的问题。

删除行时,没有“自动”机制可以更改其他行中列的值。

话虽如此,在开发周期中有些时候我有“静态”数据,我想控制id值,并且我已经对id值进行了更改。 但这是一个管理练习,而不是应用程序执行的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM