假设我有一张桌子,像这样(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出现并重新编号了整个数据库。您按您的书签并落在另一个问题上。整个站点将变成一团糟。
切记:对唯一标识符重新编号是邪恶的!