mysql - 使用 mysql 触发器在同一行中复制和粘贴值,这可能吗?

标签 mysql database triggers

我有一个表单,用户可以在其中输入他们的电子邮件地址以及他们的用户名和所需的密码。如果用户未选择用户名,我将如何创建将电子邮件地址复制到用户名字段(位于同一行)的触发器?

Table: Users

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

最佳答案

您确定需要触发器才能执行此操作吗?如果您可以控制插入或更新语句(如果您使用的是 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)

关于mysql - 使用 mysql 触发器在同一行中复制和粘贴值,这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6638694/

相关文章:

mysql - sql查询列值=列值-1

数据库设计太重复?

mysql - 我的触发器插入了许多记录

mysql - 在mysql中的PLSQL触发器中声明变量

sql - 触发创建父元素并在 postgresql 中检索 id

java - 打开 JDBC ResultSets 的数量是否有限制?

database - 报告对数据库的依赖

MySQL如何对表的最低值(value)/价格进行排序,并且只显示最低的名称?

mysql - 合并 sqlite 查询的行

php - SQL 错误或 PHP 错误在我的 ajax [object object] 中返回