2017-08-07 127 views
0

我有表用戶我在那裏列電子郵件。有些電子郵件地址是NULL,我想用一些虛假的電子郵件地址更新這些行,但是這個地址必須是唯一的(例如[email protected],其中X將被迭代編號)。你能幫我怎麼準備存儲過程來更新這些電子郵件地址?
謝謝。如何更新MySQL中的循環行?

+0

你嘗試過什麼到目前爲止? –

回答

1

嘗試:

declare v_i int default 1; 
declare v_rowcount int; 

select count(1) 
into v_rowcount 
from users 
where email is null; 

while (v_i <= v_rowcount) 
do 
    update users 
    set email = concat('test', v_i, '@example.com') 
    where email is null 
    limit 1; 

    set v_i = v_i + 1; 
end while; 
+0

完美。謝謝。 :-) – SMW

0

可以簡單地通過使用一個包羅萬象的查詢實現這個內部(或外部)的存儲過程,以及,:

表用於示例:

CREATE TABLE emailAddrs(email VARCHAR(255)); 
    ... 
    +------------+ 
    | email  | 
    +------------+ 
    | NULL  | 
    | NULL  | 
    | NULL  | 
    | [email protected] | 
    | NULL  | 
    | NULL  | 
    +------------+ 

示例:使用會話變量:

SET @i := 0; 
UPDATE emailAddrs SET email = CONCAT(@i := @i + 1, '@example.com') WHERE email IS NULL; 

給出:

+----------------+ 
| email   | 
+----------------+ 
| [email protected] | 
| [email protected] | 
| [email protected] | 
| [email protected]  | 
| [email protected] | 
| [email protected] | 
+----------------+ 

示例:使用隨機和通用唯一的數據生成:

UPDATE emailAddrs SET email = CONCAT(SHA(UUID()), '@example.com') WHERE email IS NULL; 

給出:

+------------------------------------------------------+ 
| email            | 
+------------------------------------------------------+ 
| [email protected] | 
| [email protected] | 
| [email protected] | 
| [email protected]           | 
| [email protected] | 
| [email protected] | 
+------------------------------------------------------+