Mysql - 创建触发器以根据插入另一个表中的行插入新行

Posted

技术标签:

【中文标题】Mysql - 创建触发器以根据插入另一个表中的行插入新行【英文标题】:Mysql - Create trigger to insert a new row based on a row inserted in another table 【发布时间】:2017-09-11 16:20:24 【问题描述】:

您好,我有两个表,分别名为 usersuserrewards。当新行插入到 users 表中时,我想使用 userid 并在 userrewards 表中创建一个新行,前提是 usertype 是“高级”。在 userrewards 表中,我只需要插入用户 ID - 其余字段设置为默认值,直到用户自己进行更改。如何通过触发器做到这一点?

【问题讨论】:

检查dev.mysql.com/doc/refman/5.7/en/create-trigger.html 【参考方案1】:

您需要在用户上创建一个“插入后”触发器:这就是您正在观看的表格。现在,如果我猜对了您的列名,则用于创建触发器的 sql 应该如下所示:

CREATE TRIGGER user_ai AFTER INSERT ON user 
FOR EACH ROW
BEGIN
    IF new.usertype = 'premium' THEN
        INSERT INTO userrewards (user_id) VALUES new.id;
    END IF;
END; 

可以在here 中找到另一个带有 if 语句和 :old / :new 值的触发器示例。创建触发器here 的 MySQL 文档。 if 语法 here 的 MySQL 文档。

【讨论】:

MySQL 在 NEW 和 OLD 之前不使用冒号。我认为这是 Oracle 语法。 谢谢@BillKarwin。你是对的:我将 MySQL 与 Oracle 混淆了。

以上是关于Mysql - 创建触发器以根据插入另一个表中的行插入新行的主要内容,如果未能解决你的问题,请参考以下文章

如何根据laravel控制器中另一个表中保存的数据创建触发器以填充数据库中的表

根据日期和在 Snowflake 中的另一个表中为该日期列出的最大行数限制插入到表中的行

更新/插入/删除表中的行后触发的触发器有问题

根据另一个表中的值删除行

根据另一个表中的条件计算表中的行数

Mysql根据不同的行更新表中的行值