如何为mysql中的字段提供自动编号?

如何为mysql中的字段提供自动编号?,mysql,Mysql,我想为MySQL数据库中的字段提供自动编号 这就像 我有名字,号码 name number -------------------- aaaa 1 bbbb 2 cccc 3 dddd 4 eeee 5 姓名号码 -------------------- aaaa 1 bbbb 2 中交三局 dddd 4 eeee 5 现在我想删除第三个字段(即cccc) 删除后,如果我选择了该表中的所有行 我

我想为MySQL数据库中的字段提供自动编号

这就像

我有名字,号码

name number -------------------- aaaa 1 bbbb 2 cccc 3 dddd 4 eeee 5 姓名号码 -------------------- aaaa 1 bbbb 2 中交三局 dddd 4 eeee 5 现在我想删除第三个字段(即cccc) 删除后,如果我选择了该表中的所有行 我想得到像这样的输出

name number ----------------------- aaaa 1 bbbb 2 dddd 3 eeee 4 姓名号码 ----------------------- aaaa 1 bbbb 2 dddd 3 eeee 4
有谁能提供更好的解决方案吗?

为您想要的数字设置自动递增

检查此链接


您可以在选择时动态进行排名

select name, 
       @rank := @rank + 1 as number
from your_table, (select @rank := 0) r
order by name

那么您的表中根本不需要
数字
列。

首先:为什么这样做?看起来你的数字序列通常是一个主键,这意味着-这个数字本身没有其他意义。因此,您不必担心it中的漏洞,而是让DBMS为您处理

如果您仍想重新排列您的号码,可以使用以下方法:

UPDATE t CROSS JOIN (SELECT @i:=0) AS init SET t.number=@i:=@i+1

-但是,真的,考虑一下这个问题——也就是说,如果你真的需要这样做的话。

假设代码中有一个数字位置的变量, 例如$NumberPosition=3, 然后


如果我删除了一条记录,它会自动重新排列号码吗?@user2605977,不会,它不会重新编号。即使是这样,下一行也将是
ffff 6
。竞争条件也存在问题,例如,如果我同时删除行
bbbb2
。这不是一个好的解决方案。但我需要用修改后的值来维护表中的数字列。也许有更好的方法。你能更新你的问题来解释你想用那个订单做什么以及为什么你需要它吗?我几乎可以肯定你不想这样做。谢谢。我得到了我想要的。
UPDATE table SET number=(number-1) WHERE number>$NumberPosition