2017-08-07 3 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] | 
+------------------------------------------------------+ 
関連する問題