如何在删除表中的行时更新自动增加的ID?

问题描述:

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

ID站东西
1 PT1
2 PT2
3 PT3

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

ID station
1 pt1
3 pt3

有什么办法可以让我更新表的id,对于这个例子,第三行中的id代替值为3的值是2? 在此先感谢!

+0

我认为id是唯一的数据库标识符?因为那么乔斯林的回答将是有效的 – wterbeek 2012-08-16 14:49:43

+0

你能提供你为什么想要这样做的原因吗? – tsells 2012-08-16 16:55:08

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

最后,如果您的编号存在空白,则不存在实际问题。

+0

Tnx,我想这是因为我问这个问题,知道它可能与否。我很高兴你和其他人清楚地解决了我的疑惑。 – 2012-08-17 14:54:04

我建议你在删除一行时不要做任何特殊的事情。是的,你在ID中会有空白,但你为什么在意呢?这只是一个ID。

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

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

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

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

没有“自动”机制,当行被删除,改变在其他行的列的值。

随着开发周期中说,有次在那里我有“静”数据,我想要控制id值,并且我已经对id值进行了更改。但是这个 是一个管理exerci se,而不是由应用程序执行的功能。