假设我有一张桌子,像这样(id是自动递增的):

id | col1 | col2
1  | 'msg'| 'msg'
2  | 'lol'| 'lol2'
3  | 'xxx'| 'x'

现在,我想删除第2行,我得到这样的信息
id | col1 | col2
1  | 'msg'| 'msg'
3  | 'xxx'| 'x'

问题是,我想得到的是:
id | col1 | col2
1  | 'msg'| 'msg'
2  | 'xxx'| 'x'

如何以最简单的方式做到这一点(我对MySQL的了解非常差)?

最佳答案

你不应该那样做。
不要将自动递增的唯一标识符用作序数。
单词“unique”表示该标识符应永远粘贴在其行

这些数字和枚举之间没有联系。
假设您要按字母顺序选择记录。您的贵重号码会去哪儿?
数据库可能不像您想的那样是有序列表。它不是平面文件,其行以预定义的顺序存储。它具有完全不同的意识形态。数据库中的行没有任何顺序。如果仅由ORDER BY子句明确设置,并且仅在选择时进行排序。
另外,数据库应该为您搜索。因此,您可以告诉我们,对于经过过滤的行或以不同的顺序进行排序,此自动递增的数字将与实际行的位置完全无关。

如果您想枚举输出-这是表示层的工作。只需在PHP端添加一个计数器。

再说一遍:这些数字应该可以识别某个记录。如果您更改此号码,您将再也找不到您的记录。

以这个网站为例。堆栈溢出使用以下数字标识其问题:



因此,假设您将此页面地址保存到了书签中。现在,Jeff出现并重新编号了整个数据库。您按您的书签并落在另一个问题上。整个站点将变成一团糟。

切记:对唯一标识符重新编号是邪恶的!

09-11 18:32