1

我想在 mySQL 表中创建一个列(自动增量),我知道该怎么做,但是当我删除一行时,必须自动组织列,这是一个示例:

rownum |  name
------------
1      | aaaa
2      | bbbb
3      | cccc
4      | dddd

如果我删除第二行,结果应该是:

rownum |  name
------------
1      | aaaa
2      | cccc
3      | dddd

不是这样的:

rownum |  name
------------
1      | aaaa
3      | cccc
4      | dddd

无论如何要这样做还是每次删除/插入某些内容时都必须编辑该列?

4

4 回答 4

2

为什么不只创建一个虚拟行号

SELECT 
    @curRow := @curRow + 1 AS row_number,
    t.name
FROM    Tbll t
JOIN    (SELECT @curRow := 0) r;

因此,您不必担心每次删除时都重新排序。

于 2013-05-24T22:11:55.897 回答
0

您可以通过以下步骤重新排列自动增量:

 ALTER TABLE your_table DROP rownum;
 ALTER TABLE your_table AUTO_INCREMENT = 1;
 ALTER TABLE your_table ADD rownum bigint UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; 

解释:

  • 删除列 rownum
  • 将 auto_increment 设置为 1
  • 首先使用自动增量重新创建列 rownum
于 2013-05-24T22:08:28.937 回答
0

试试这个,在我自己的一端测试 -

ALTER TABLE test ADD COLUMN id2 int unsigned not null;
SET @a:=0;
UPDATE test SET id2=@a:=@a+1 ORDER BY `rownum`;
ALTER TABLE test DROP rownum;
ALTER TABLE test CHANGE id2 rownum int UNSIGNED NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (rownum);

之前——

前

之后——

后

仅供参考,如果在屏幕截图中注意到此查询块将更改您的列结构,但是您始终可以在简单的单行查询运行中更改列结构。

于 2013-05-24T22:46:05.360 回答
0

我认为唯一的方法是删除主键列并重新创建它。您的所有行都将被重新分配,并且它们应该按照插入的顺序排列。无论如何,我不明白您为什么要这样做,因为如果您有任何带有外键的表作为列删除,您将不得不手动更改它们。你确定要这样做吗?

于 2013-05-24T22:04:35.717 回答