我有一个大型数据表,其中添加了一个名为uniq_id
的新字段,我正在寻找的是一个可以运行的查询,它将为每一行更新和增加此字段,而无需编写脚本这样做。
有什么想法吗?
答案 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参数;它有效地建立了第一行的列值。)