帮助编写MySQL触发器

时间:2011-06-20 18:01:59

标签: mysql triggers

使用以下表格:

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

我想在创建新Party后用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 ;

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-1)

试试这个

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;