我的数据库中有大约1000个条目:
id name
0 elephant
0 snake
0 monkey
....
之后我不想改变所有ID。所以它看起来像这样:
id name
1 elephant
2 snake
3 monkey
....
如何使用SQL实现此目的?
答案 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 |