删除某些行后,自增的字段怎么重新排序?从第一行开始

2019-01-23 12:12:55 +08:00
 wsh1108

rt,谢谢

4296 次点击
所在节点    MySQL
8 条回复
itqls
2019-01-23 12:24:17 +08:00
别用自增主键,自己定义一个变量
这种问题问 google..
GeekCourse
2019-01-23 12:43:47 +08:00
手动修改表的自增初始值
chro008
2019-01-23 12:49:36 +08:00
这样是不是个解决的办法? 删掉自增主键,新建自增主键
ALTER TABLE xxx DROP id;
ALTER TABLE xxx ADD id int(10) NOT NULL FIRST;
ALTER TABLE xxx MODIFY COLUMN id int(10) NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id);
chro008
2019-01-23 13:57:26 +08:00
如果有好的方法麻烦 @我一下
ynyyn
2019-01-23 14:35:49 +08:00
当我还有强迫症的时候我也这样做。
LinInV2
2019-01-23 15:01:28 +08:00
@itqls 定义的这个变量和业务有关,并且后续不会其他列做二级索引,我觉得不用自增主键可以。
不然一般情况下肯定是使用 自增主键的。
MySQL 的底层数据结构 B+树 的特性使
c4f36e5766583218
2019-02-22 18:14:49 +08:00
@chro008 删除 id 的方法不太好,如果其它表用了这个做外键的话。

条件:有外键的地方需要```UPDATE CASCADE```,不然调整了 id 就数据出错了
```
SET @rowNum = 0; update xxx set id=(@rowNum := @rowNum + 1) order by id;
/* ↑这里 order 会起到按原先 id 排序调整的作用吗? */
ALTER TABLE xxx AUTO_INCREMENT = new_in;
/* ↑这里的 new_in 貌似没法传变量,需手动设值;或者删除自增再添加自增试试 */
```
c4f36e5766583218
2019-02-22 18:17:29 +08:00
这里 order 会起到按原先 id 排序调整的作用吗? ->
这里 order 会起到按原先 id 排序调整的作用吗?还是写了也没用?还是不需要写,本来就是按原先 id 排序调整?(没研究过

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/529758

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX