2011-07-10 4 views
1

私は、ユーザーが自分のユーザー名とパスワードを入力して電子メールアドレスを入力するフォームを持っています。ユーザーがユーザー名を選択しなかった場合、電子メールアドレスをユーザー名フィールド(同じ行にあります)にコピーするトリガーを作成するにはどうすればよいですか?mysqlトリガを使用して同じ行内の値をコピー&ペーストすることは可能ですか?

Table: Users 

+-------+---------+------+-----+---------+ 
| uName | uPassword | uEmail | 
+-------+---------+------+-----+---------+ 
| NULL | pass123 | [email protected] | 
+-------+---------+------+-----+---------+

答えて

0

本当にトリガーが必要ですか?あなたが挿入/更新文を制御していない場合

mysql> insert into t4 (uemail, upassword, uname) SELECT @email:='[email protected]', 'secretpassword', ifnull(null, @email); 
Query OK, 1 row affected (0.00 sec) 
Records: 1 Duplicates: 0 Warnings: 0 

mysql> select * from t4 where uemail='[email protected]'; 
+-------------+----------------+-------------+ 
| uname  | upassword  | uemail  | 
+-------------+----------------+-------------+ 
| [email protected] | secretpassword | [email protected] | 
+-------------+----------------+-------------+ 
1 row in set (0.00 sec) 

:あなたは(あなたはORMを使用しているではない可能性がある場合)あなたの挿入や更新の文を管理している場合は、このような何かを行うことができます、はい、そのためにトリガーを使用できます:

mysql> create trigger setuname before insert on t4 
    -> for each row begin 
    -> set new.uname=ifnull(new.uname, new.uemail); 
    -> end; 
    -> | 
Query OK, 0 rows affected (0.09 sec) 

mysql> delimiter ; 

mysql> insert into t4 (uname, uemail, upassword) values (null, '[email protected]', 'secretpassword'); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from t4; 
+-------------+----------------+-------------+ 
| uname  | upassword  | uemail  | 
+-------------+----------------+-------------+ 
| [email protected] | secretpassword | [email protected] | 
+-------------+----------------+-------------+ 
1 row in set (0.00 sec)