我正在尝试将递增的值添加到表中的新列。 这是表
的示例结构---------------------
Name - class - id
---------------------
abbc - 2 - null
efg - 4 - null
ggh - 6 - null
---------------------
我想编写一个查询,为表中的所有记录生成唯一的id 这是我尝试的查询,但显示为null
set @i=0;
update table1 set id =(@i:=@i+1);
答案 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)
答案 2 :(得分:0)
SET @a = 0;
UPDATE table_name SET id = @a:=@a+1;
答案 3 :(得分:-1)
请改为使用相应列的AUTOINCREMENT参数。此参数将在相应列中添加唯一的自动递增值。