如何按顺序更改sql表中的所有ID?

时间:2018-05-11 10:49:10

标签: mysql

我的数据库中有大约1000个条目:

id      name
 0      elephant
 0      snake
 0      monkey
....

之后我不想改变所有ID。所以它看起来像这样:

id      name
 1      elephant
 2      snake
 3      monkey
....

如何使用SQL实现此目的?

2 个答案:

答案 0 :(得分:3)

一种选择是在新表中利用自动增量列,然后将之前的内容插入该表中。首先,创建一个具有自动增量ID的新表:

CREATE TABLE newTable (
    id INT AUTO INCREMENT NOT NULL,
    name varchar(255)
);

现在将旧表插入新表:

INSERT INTO newTable (name)
SELECT name FROM oldTable;     -- you may select multiple columns here

这里有两个潜在的缺点,即现在你有一个可能需要删除的旧表,并且分配给这些名称的顺序也是任意的。但由于缺乏如何分配ID的逻辑,这种方法似乎是合理的。

答案 1 :(得分:2)

以下是针对您的问题的分步解决方案,希望能够解决您的问题。

mysql> create table dt1(id int,name varchar(20));
mysql> insert into dt1 values(0,'elephant');
mysql> insert into dt1 values(0,'snake');
mysql> insert into dt1 values(0,'monkey');
mysql> select * from dt1;
+------+----------+
| id   | name     |
+------+----------+
|    0 | elephant |
|    0 | snake    |
|    0 | monkey   |

mysql> update dt1 x join (select id,name,@r:=@r+1 as new_id from dt1,(select @r := 0)r) y on (x.name = y.name) set x.id = y.new_id;
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select * from dt1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | elephant |
|    2 | snake    |
|    3 | monkey   |