我有一个名为users的表,例如它看起来像:
Name ID
Tom 1
Al 55
Kate 22
...
问题是:ID不按顺序排列。
我想从1到用户长度给他们新的ID。我想声明一些var = 1并在循环中创建UPDATE并为它们提供新的ID = var,然后执行var = var + 1直到var< = users length
我该怎么做?
非常感谢!
答案 0 :(得分:2)
以下是在MySQL中如何做到这一点。跑吧:
set @newid=0;
update users set ID = (@newid:=@newid+1) order by ID;
答案 1 :(得分:1)
如果FK中其他表未引用Users表中的ID,则以下查询可以更新表中的ID以获得新的连续值:
CREATE TABLE IF NOT EXISTS tmpUsers (
ID int not null,
newID int not null auto_increment primary key
) engine = mysisam;
INSERT INTO tmpUsers (ID,newID)
SELECT ID,NULL
FROM users
ORDER BY ID;
UPDATE users u INNER JOIN tmpUsers t
ON u.ID=t.ID
SET u.ID=t.NewID;
DROP TABLE IF EXISTS tmpUsers;
测试脚本:
CREATE TABLE users (ID int not null, name nvarchar(128) not null);
INSERT users(ID,name)
VALUES (1,'aaa'),(4,'bbb'),(7,'ggg'),(17,'ddd');
SELECT * FROM users;