我正在创建在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? 提前谢谢!
答案 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
值进行了更改。但是这个
是一个管理练习,而不是由应用程序执行的功能。