0

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

有任何想法吗?

4

2 回答 2

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;
于 2012-06-12T08:17:01.067 回答
0

该表还有哪些其他列?如果你用AUTO_INCREMENTMySQL 定义新列,它将用从 1 开始的顺序值填充它。但是有一个问题:列必须是键,或者至少是键的一部分(有关详细信息,请参阅文档)。如果表中还没有主键,则可以简单地执行以下操作:

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));

coalesce返回它的第一个非空参数;它有效地为第一行建立列的值。)

于 2012-06-12T08:23:10.440 回答