mysql - 帮助编写 MySQL 触发器

标签 mysql triggers

用下表:

Party.(PartyId, PartyTypeCode)Member.(MemberId (FK), Name)

我想在创建新派对后用派对 ID 的值填充 MemberId 列。

我知道下面的 SQL 是错误的,但这就是我寻求帮助以使其正确的原因。

CREATE TRIGGER tgr_member_create AFTER INSERT on Party
FOR EACH ROW BEGIN
    IF NEW.PartyTypeCode = 'M' THEN
        INSERT Member(MemberId)
        VALUES('Party.PartyId')
    END IF;
END;

感谢 Nanne 的投入,这是有效的:

DELIMITER $$

CREATE TRIGGER tgr_member_create AFTER INSERT on Party
FOR EACH ROW BEGIN
    IF NEW.PartyTypeCode = 'M' THEN
        INSERT Member (MemberId,Name)
        VALUES(NEW.PartyId, 'someName');
    END IF;
END;$$

DELIMITER ;

最佳答案

您的值应该调用 NEW 行,就像您对 partytypecode 所做的那样吗?我假设

delimiter $$

CREATE TRIGGER tgr_member_create AFTER INSERT on Party
FOR EACH ROW BEGIN
    IF NEW.PartyTypeCode = 'M' THEN
        INSERT Member (MemberId,Name)
        VALUES(NEW.PartyId, 'someName')
    END IF;
END;$$

注意分隔符代码。因为您在内部使用 ; ,所以您不能将它用作普通的“命令结束”标记。这就是为什么 &&

用于调试: 当您在触发器之外执行查询时,请确保查询有效:

INSERT Member (MemberId,Name)
VALUES(party-id goes here, 'someName')

这里可能有一个小错误。显然填写你的partyId。

关于mysql - 帮助编写 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6415434/

相关文章:

sql-server - 触发和禁用 "row(s) affected"消息

database - 触发器与非规范化存储过程的优缺点

Mysql 连接为小型解决方案集生成巨大的结果表

php - 通过过滤器从多个数据库中选择

mysql - SQLite 选择所有记录并计数

sql - 如何忽略触发器中的错误并在 MS SQL Server 中执行相应的操作

数据库 : atomic triggers

c# - "Fatal error encountered during command execution."mysql-connector .net

php - 如何加入多个查询

mysql - 在触发器中获取最新插入的 ID?