我有一个大型数据表,其中添加了一个名为uniq_id
我正在寻找的新字段是我可以运行的查询,它将为每一行更新和增加该字段,而无需编写脚本来执行此操作。
有任何想法吗?
一些这样的想法(没有你的结构很难做得更好)
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;
该表还有哪些其他列?如果你用AUTO_INCREMENT
MySQL 定义新列,它将用从 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
返回它的第一个非空参数;它有效地为第一行建立列的值。)