删除表中的行时如何更新自动增量id?

时间:2012-08-16 14:42:07

标签: c# mysql

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

  

id station
  1 pt1
  2 pt2
  3 pt3

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

  

id station
  1 pt1
  3 pt3

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

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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

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

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

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

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