mysql查询质量增量

时间:2012-06-12 08:09:42

标签: mysql

我有一个大型数据表,其中添加了一个名为uniq_id的新字段,我正在寻找的是一个可以运行的查询,它将为每一行更新和增加此字段,而无需编写脚本这样做。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

类似的东西(没有你的结构很难做得更好)

SET @rank = 0;
UPDATE <your table> JOIN (SELECT @rank:= @rank+ 1 AS rank, <your pk> FROM <your table> ORDER BY rank DESC)
AS order USING(<your pk>) SET <your table>.uniq_id = order.rank;

或更容易

SET @rank=0;
UPDATE <your table> SET uniq_id= @rank:= (@rank+1) ORDER BY <anything> DESC;

答案 1 :(得分:0)

该表有哪些其他列?如果使用AUTO_INCREMENT定义新列,MySQL将使用从1开始的顺序值填充它。虽然有一个问题:列必须是键,或者至少是键的一部分(请参阅{{3详情)。如果表中没有主键,则可以执行以下操作:

alter table MyTable add uniq_id int auto_increment, add primary key (uniq_id);

如果您无法更改表中的键并且只想将新列的值填充为一次性事物,则可以使用此update语句:

update MyTable set uniq_id = (@count := coalesce(@count+1, 1));

documentation返回其第一个非null参数;它有效地建立了第一行的列值。)