2017-08-07 74 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] | 
+------------------------------------------------------+