将递增的值添加到新列

时间:2014-02-24 05:13:08

标签: mysql sql multiple-insert

我正在尝试将递增的值添加到表中的新列。 这是表

的示例结构
---------------------
Name - class - id
---------------------
abbc - 2     - null
efg  - 4     - null
ggh  - 6     - null
---------------------

我想编写一个查询,为表中的所有记录生成唯一的id 这是我尝试的查询,但显示为null

set @i=0;
update table1 set id =(@i:=@i+1);

4 个答案:

答案 0 :(得分:2)

你所展示的应该有效; id列应该被赋值。

我测试了你的陈述;我验证它适用于我的数据库。这是我运行的测试用例:

CREATE TABLE table1 (`name` VARCHAR(4), class TINYINT, id INT);
INSERT INTO table1 (`name`,class) VALUES ('abbc',2),('efg',4),('ggh',6);
SET @i=0;
UPDATE table1 SET id =(@i:=@i+1);
SELECT * FROM table1;

请注意,MySQL用户变量特定于数据库会话。如果SET在一个会话中运行,并且UPDATE正在运行另一个会话,那么这将解释您所看到的行为。 (您没有提到您运行语句的客户端;大多数客户端重用相同的连接,并且不会为每个语句转换连接,我只是将其作为一种可能性。)

为确保在运行UPDATE语句时实际初始化@i变量,您可以通过执行以下操作在UPDATE语句中进行初始化:

UPDATE table1 t
 CROSS
  JOIN (SELECT @i := 0) s
   SET t.id =(@i:=@i+1);

我测试过,这也适用于我的数据库。

答案 1 :(得分:1)

尝试此查询我的朋友:

set @i=0;
update table1 set id =(select @i:=@i+1);

SQL Fiddle

答案 2 :(得分:0)

SET @a = 0;  
UPDATE table_name SET id = @a:=@a+1;

答案 3 :(得分:-1)

请改为使用相应列的AUTOINCREMENT参数。此参数将在相应列中添加唯一的自动递增值。