Вы уверены, что для этого нужен триггер? Если у вас есть контроль над оператором вставки или обновления (чего нельзя делать, если вы используете 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)