mysql中的auto_increment怎么重新排序

时间:2020-12-29 09:09:57
mysql中的auto_increment属性的ID,当删除一行数据后,怎么重新排序。考虑到后期的数据量可能有点大,希望哪位大哥帮帮忙,指教下小弟

14 个解决方案

#1


set @num = 0;
seelct @num := @num + 1 ,* from tb;

#2


引用
mysql中的auto_increment属性的ID,当删除一行数据后,怎么重新排序。
什么叫重新排序? 直接ORDER BY ID不就行了?

问题说明越详细,回答也会越准确!参见如何提问。( 提问的智慧
     mysql中的auto_increment怎么重新排序

#4


备份数据(除了自增字段)->TRUNCATE tt;->插入记录 

#5


重新排序是因为id值不连续了,删除的行有可能是原来数据中的某一个中间行。
备份数据(除了自增字段)->TRUNCATE tt;->插入记录 
你的方法估计也不行,我做的是计费系统,后期数据量肯定很大,数据表不敢随便删掉

#6


哪位大哥帮忙想个实际的方法,帮帮忙

#7


引用 5 楼 guxingyue2011 的回复:
重新排序是因为id值不连续了,删除的行有可能是原来数据中的某一个中间行。
备份数据(除了自增字段)->TRUNCATE tt;->插入记录 
你的方法估计也不行,我做的是计费系统,后期数据量肯定很大,数据表不敢随便删掉

那就只有用变量累计法了
set @num = 0;
seelct @num := @num + 1 ,* from tt;

#8


关于2楼指出的结贴率的问题,因为本人是新号,只是最近才发的帖子,所以还在寻觅答案中,本人不用吝啬分,只求受教

#9


引用 7 楼 wwwwb 的回复:
set @num = 0;
select @num := @num + 1 ,* from……

这个语句在mysql的后台(本人是在虚拟机下用命令创建的表)怎么使用啊,另外本人感觉这种方法跟auto_increment无本质上的区别,这个变量不会计算记录的条数,当删除一条记录时,该变量还是不会自减,麻烦你给个具体点的方案把

#10


什么叫“ 重新排序” ?

建议举例说明。


 (不要高估你的汉语表达能力或者我的汉语理解能力)
   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
   参考一下这个贴子的提问方式 http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
   
   1. 你的 create table xxx .. 语句
   2. 你的 insert into xxx ... 语句
   3. 结果是什么样,(并给以简单的算法描述)
   4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
   
   这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

   

#11


重新排序就是这样:
id  name
1   1 
3   3
5   5
我现在想要使属性为auto_increment的id变成有序,即使
id  name
1   1
2   3
3   5

#12


如果这种需求,在任何一种数据库中都无法通过自增字段来实现。

你应该使用触发器来实现这个功能,而不是auto_increment
另外这种应用显然会造成系统极大的负担和不确定性。比如 表中已经有1到10万连续的记录,当删除ID=10的记录时,后续的9万9千9百9十条记录都需要去更新ID值,显然这不是一个好的应用方案。

楼主应该问一下,“ 为什么要使ID值保持连续?”

#13


引用 12 楼 acmain_chm 的回复:
如果这种需求,在任何一种数据库中都无法通过自增字段来实现。

你应该使用触发器来实现这个功能,而不是auto_increment
另外这种应用显然会造成系统极大的负担和不确定性。比如 表中已经有1到10万连续的记录,当删除ID=10的记录时,后续的9万9千9百9十条记录都需要去更新ID值,显然这不是一个好的应用方案。

楼主应该问一下,“为什么要使ID值保持连续?”

其实想使ID值保持连续,我本人确实有点想法:
1.保持连续的话,看着给人的感觉就舒服点(当然有人提倡残缺美)
2.我后面有个表中的数据我也想用auto_increment定义,这个表中的数据类似于我们使用的充值卡号,通过auto_increment定义索引,以后查找也方便点。另外如果充值卡号ID值不连续,以后可能会出现很多问题的

#14


1.保持连续的话,看着给人的感觉就舒服点(当然有人提倡残缺美)
2.我后面有个表中的数据我也想用auto_increment定义,这个表中的数据类似于我们使用的充值卡号,通过auto_increment定义索引,以后查找也方便点。另外如果充值卡号ID值不连续,以后可能会出现很多问题的



.....跟这些没关系!~也不会出问题!ID就是个标识而已。

#1


set @num = 0;
seelct @num := @num + 1 ,* from tb;

#2


引用
mysql中的auto_increment属性的ID,当删除一行数据后,怎么重新排序。
什么叫重新排序? 直接ORDER BY ID不就行了?

问题说明越详细,回答也会越准确!参见如何提问。( 提问的智慧
     mysql中的auto_increment怎么重新排序

#3


#4


备份数据(除了自增字段)->TRUNCATE tt;->插入记录 

#5


重新排序是因为id值不连续了,删除的行有可能是原来数据中的某一个中间行。
备份数据(除了自增字段)->TRUNCATE tt;->插入记录 
你的方法估计也不行,我做的是计费系统,后期数据量肯定很大,数据表不敢随便删掉

#6


哪位大哥帮忙想个实际的方法,帮帮忙

#7


引用 5 楼 guxingyue2011 的回复:
重新排序是因为id值不连续了,删除的行有可能是原来数据中的某一个中间行。
备份数据(除了自增字段)->TRUNCATE tt;->插入记录 
你的方法估计也不行,我做的是计费系统,后期数据量肯定很大,数据表不敢随便删掉

那就只有用变量累计法了
set @num = 0;
seelct @num := @num + 1 ,* from tt;

#8


关于2楼指出的结贴率的问题,因为本人是新号,只是最近才发的帖子,所以还在寻觅答案中,本人不用吝啬分,只求受教

#9


引用 7 楼 wwwwb 的回复:
set @num = 0;
select @num := @num + 1 ,* from……

这个语句在mysql的后台(本人是在虚拟机下用命令创建的表)怎么使用啊,另外本人感觉这种方法跟auto_increment无本质上的区别,这个变量不会计算记录的条数,当删除一条记录时,该变量还是不会自减,麻烦你给个具体点的方案把

#10


什么叫“ 重新排序” ?

建议举例说明。


 (不要高估你的汉语表达能力或者我的汉语理解能力)
   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
   参考一下这个贴子的提问方式 http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
   
   1. 你的 create table xxx .. 语句
   2. 你的 insert into xxx ... 语句
   3. 结果是什么样,(并给以简单的算法描述)
   4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
   
   这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

   

#11


重新排序就是这样:
id  name
1   1 
3   3
5   5
我现在想要使属性为auto_increment的id变成有序,即使
id  name
1   1
2   3
3   5

#12


如果这种需求,在任何一种数据库中都无法通过自增字段来实现。

你应该使用触发器来实现这个功能,而不是auto_increment
另外这种应用显然会造成系统极大的负担和不确定性。比如 表中已经有1到10万连续的记录,当删除ID=10的记录时,后续的9万9千9百9十条记录都需要去更新ID值,显然这不是一个好的应用方案。

楼主应该问一下,“ 为什么要使ID值保持连续?”

#13


引用 12 楼 acmain_chm 的回复:
如果这种需求,在任何一种数据库中都无法通过自增字段来实现。

你应该使用触发器来实现这个功能,而不是auto_increment
另外这种应用显然会造成系统极大的负担和不确定性。比如 表中已经有1到10万连续的记录,当删除ID=10的记录时,后续的9万9千9百9十条记录都需要去更新ID值,显然这不是一个好的应用方案。

楼主应该问一下,“为什么要使ID值保持连续?”

其实想使ID值保持连续,我本人确实有点想法:
1.保持连续的话,看着给人的感觉就舒服点(当然有人提倡残缺美)
2.我后面有个表中的数据我也想用auto_increment定义,这个表中的数据类似于我们使用的充值卡号,通过auto_increment定义索引,以后查找也方便点。另外如果充值卡号ID值不连续,以后可能会出现很多问题的

#14


1.保持连续的话,看着给人的感觉就舒服点(当然有人提倡残缺美)
2.我后面有个表中的数据我也想用auto_increment定义,这个表中的数据类似于我们使用的充值卡号,通过auto_increment定义索引,以后查找也方便点。另外如果充值卡号ID值不连续,以后可能会出现很多问题的



.....跟这些没关系!~也不会出问题!ID就是个标识而已。