假设我有一个表,像这样(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"意味着标识符应该固定在其行上forever.
这些数字和枚举之间没有任何联系。
想象一下您想要按字母顺序选择记录。你宝贵的号码会去哪里?
正如您可能认为的那样,数据库不像有序列表。它不是一个以预定义顺序存储行的平面文件。它有完全不同的意识形态。数据库中的行没有任何顺序。如果明确设置,则仅在选择时间排序ORDER BY
clause.
此外,数据库应该为您进行搜索。因此,您可以看出,通过过滤行或不同的排序,此自动增量数字将与实际行位置完全无关。
如果您想枚举输出 - 这是表示层的工作。只需在 PHP 端添加一个计数器即可。
再说一次:这些数字应该识别特定的记录。如果您更改此号码,您将再也找不到您的记录。
以这个网站为例。 Stack Overflow 用这样的数字来识别其问题:
stackoverflow.com/questions/3132439/mysql-自动递减值
因此,假设您将此页面地址保存到书签中。现在杰夫出现并重新编号了整个数据库。您按书签并找到不同的问题。整个网站将变得一团糟。
请记住:对唯一标识符重新编号是邪恶的!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)