2
這看起來在概念上很簡單,但是一旦我將它放入SQL術語中,就很難了。如何爲mysql表中的新列中的每一行生成唯一值?
說一個人在一個名爲「stuff」的表中有3行。
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兼容的方法來做到這一點?我想不出會是什麼。
哇。那麼,這看起來不像標準的SQL,但它非常酷。而且速度更快。我一直在使用MySQL一段時間,從來沒有使用變量。猜猜我應該學習。感謝名單 –