5

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

id 站
1 pt1
2 pt2
3 pt3

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

id 站
1 pt1
3 pt3

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

4

3 回答 3

5

我建议您在删除行时不要做任何特别的事情。是的,您的 id 会出现空白,但您为什么要在意呢?这只是一个id。

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

于 2012-08-16T14:48:20.263 回答
5

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

最后,如果您的编号有空白,则没有真正的问题。

于 2012-08-16T14:50:01.563 回答
2

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

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

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

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

With that said, there are times in the development cycle where I have had "static" data, and I wanted control over the id values, and I have made changes to id values. But this is an administrative exercise, not a function performed by an application.

于 2012-08-16T16:47:11.173 回答