帮助编写MySQL触发器

帮助编写MySQL触发器,mysql,triggers,Mysql,Triggers,使用以下表格: Party.(PartyId,PartyTypeCode)和成员(MemberId(FK),姓名) 我想在创建新的参与方后,用PartyId的值填充MemberId列 我知道下面的SQL是错误的,但这就是为什么我寻求帮助,使其正确 CREATE TRIGGER tgr_member_create AFTER INSERT on Party FOR EACH ROW BEGIN IF NEW.PartyTypeCode = 'M' THEN INSERT M

使用以下表格:

Party.(PartyId,PartyTypeCode)
成员(MemberId(FK),姓名)

我想在创建新的参与方后,用PartyId的值填充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 ;
试试这个

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

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

您的值应该调用
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。

您的值应该调用
新的
行,就像我猜您对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。

谢谢。当我尝试将其添加到数据库时,仍然会出现错误。“这不会填充成员表的‘名称’字段(当然:)”这可能是问题的一部分,因为名称是必填字段吗?我是否也需要将其添加到触发器中?该错误是一般性的“#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第6行“END IF”附近使用的正确语法”。好的,您在触发器中执行的SQL必须有效。所以,如果名称是必需的,您应该添加它。这个错误是另外一个问题。你用分隔符做的一切都好吗?我将添加一个更完整的示例谢谢你的帮助。我把你的代码加上了分隔符;克服困难;就像我在里面一样。现在我有了这个,但我想我可能是走错了路。也许我需要一个存储过程而不是触发器,因为我将从PHP表单中获取我的名字?就我而言,触发器只有几个有效的用法。例如,为了保持数据完整性,记录某些操作等,大多数工作可以更好地用过程或带有事务的代码来处理。祝你好运谢谢当我尝试将其添加到数据库时,仍然会出现错误。“这不会填充成员表的‘名称’字段(当然:)”这可能是问题的一部分,因为名称是必填字段吗?我是否也需要将其添加到触发器中?该错误是一般性的“#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第6行“END IF”附近使用的正确语法”。好的,您在触发器中执行的SQL必须有效。所以,如果名称是必需的,您应该添加它。这个错误是另外一个问题。你用分隔符做的一切都好吗?我将添加一个更完整的示例谢谢你的帮助。我把你的代码加上了分隔符;克服困难;就像我在里面一样。现在我有了这个,但我想我可能是走错了路。也许我需要一个存储过程而不是触发器,因为我将从PHP表单中获取我的名字?就我而言,触发器只有几个有效的用法。例如,为了保持数据完整性,记录某些操作等,大多数工作可以更好地用过程或带有事务的代码来处理。祝你好运