每行的MySQL循环和更新

时间:2016-09-16 19:41:38

标签: mysql sql-update

我有一个名为users的表,例如它看起来像:

  Name  ID 
  Tom    1
  Al    55 
  Kate  22

...

问题是:ID不按顺序排列。

我想从1到用户长度给他们新的ID。我想声明一些var = 1并在循环中创建UPDATE并为它们提供新的ID = var,然后执行var = var + 1直到var< = users length

我该怎么做?

非常感谢!

2 个答案:

答案 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;