首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何顺序地更改sql表中的所有ids?

问如何顺序地更改sql表中的所有ids?
EN

Stack Overflow用户
提问于 2018-05-11 10:49:10
回答 2查看 841关注 0票数 1

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

代码语言:javascript
复制
id      name
 0      elephant
 0      snake
 0      monkey
....

我希望以后不要更改所有的身份证。所以看起来是这样的:

代码语言:javascript
复制
id      name
 1      elephant
 2      snake
 3      monkey
....

如何使用SQL实现这一目标?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-11 10:58:29

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

代码语言:javascript
复制
CREATE TABLE newTable (
    id INT AUTO INCREMENT NOT NULL,
    name varchar(255)
);

现在,将旧表插入新表:

代码语言:javascript
复制
INSERT INTO newTable (name)
SELECT name FROM oldTable;     -- you may select multiple columns here

这里有两个潜在的缺点:现在您有一个可能需要删除的旧表,而分配给名称的顺序也是任意的。但是,在缺乏如何分配in的逻辑的情况下,这种方法似乎是合理的。

票数 3
EN

Stack Overflow用户

发布于 2018-05-11 10:57:26

这是一步一步的解决你的问题,希望,解决你的问题。

代码语言:javascript
复制
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   |
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50290646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档