возможно ли использовать триггер mysql для копирования и вставки значения в пределах одной строки? - PullRequest
1 голос
/ 10 июля 2011

У меня есть форма, в которой пользователь вводит свой адрес электронной почты вместе со своим именем пользователя и желаемым паролем. Как мне создать триггер, который будет копировать адрес электронной почты в поле имени пользователя (расположенное в той же строке), если пользователь не выберет имя пользователя?

Table: Users

+-------+---------+------+-----+---------+
|   uName  |   uPassword   |   uEmail    |
+-------+---------+------+-----+---------+
|   NULL   |    pass123    | uzr@sql.com |
+-------+---------+------+-----+---------+

1 Ответ

0 голосов
/ 10 июля 2011

Вы уверены, что для этого нужен триггер? Если у вас есть контроль над оператором вставки или обновления (чего нельзя делать, если вы используете ORM), вы можете сделать что-то вроде этого:

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

mysql> select * from t4 where uemail='joe@joe.com';
+-------------+----------------+-------------+
| uname       | upassword      | uemail      |
+-------------+----------------+-------------+
| joe@joe.com | secretpassword | joe@joe.com |
+-------------+----------------+-------------+
1 row in set (0.00 sec)

Если у вас нет контроля над операторами вставки / обновления, тогда да, вы можете использовать триггер для этого:

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, 'joe@joe.com', 'secretpassword');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t4;
+-------------+----------------+-------------+
| uname       | upassword      | uemail      |
+-------------+----------------+-------------+
| joe@joe.com | secretpassword | joe@joe.com |
+-------------+----------------+-------------+
1 row in set (0.00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...