簡體   English   中英

如何在mysql表的新列中為每一行生成唯一值?

[英]How can one generate unique values for each row in a new column in a mysql table?

從概念上講,這似乎很簡單,但是一旦用SQL術語將其變得困難。

假設一個表中有3行,稱為“ stuff”。

 col1     col2     col3
 ------   ------   ------
 aaaa     bbbb     cccc
 xxxx     yyyy     zzzz
 aaaa     bbbb     cccc

假設我想添加一個pk列並為其賦予唯一值。 我沒有可提供的SQL更新來更新第一行而不是第三行。 但是事實證明,MySQL允許的SQL擴展給出了答案。

 alter table stuff add column pk int;
 update table set pk = 1 where pk is NULL limit 1;
 update table set pk = 2 where pk is NULL limit 1;
 update table set pk = 3 where pk is NULL limit 1;

這給了我:

 pk       col1     col2     col3
 ------   ------   ------   ------
 1        aaaa     bbbb     cccc
 2        xxxx     yyyy     zzzz
 3        aaaa     bbbb     cccc

但是事實證明,如果使用超過500萬行的表執行此操作,則將花費非常長的時間。 我有一個猜測,當我真正想要的只是一個時,它正在做大量工作來查找pk = NULL的所有行。

有誰知道為什么它運行緩慢? 是否有更快或更兼容SQL的方法來做到這一點? 我無法想象會怎樣。

您的查詢速度很慢,因為您的IS NULL條件每次都會產生FULL SCAN這顯然是因為,您仍然不能在該列上使用索引(您還沒有)

您可以使用MySQL 變量生成唯一值。 那將是:

UPDATE stuff CROSS JOIN (SELECT @pk:=0) AS init SET stuff.pk=@pk:=@pk+1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM