【问题标题】:Using Trigger to update database when insert is used使用插入时使用触发器更新数据库
【发布时间】:2018-10-11 16:40:17
【问题描述】:

我正在寻找一种使用触发器来更新不同表中的行的方法。 我试图从中获取信息的表是 AI(自动增量),也是该表的主键。

我的问题是我找不到简单的方法。

我的代码:

DROP TRIGGER IF EXISTS Konsistens;
DELIMITER $$
 CREATE TRIGGER Konsistens AFTER INSERT ON PersonData
 FOR EACH ROW
BEGIN
 INSERT INTO Bruker(BrukerNavn, Passord, PersonId)
 VALUES('Bruker1', 'pw1', LAST_INSERT_ID(PersonData.PersonID));
END

我想要的只是在 Bruker 表中为 PersonID 赋予一个值。 由于 PersonID 是从 Person 到 Bruker 的外键,当我尝试从中获取值时它似乎不存在。当我使用此触发器时,它还会创建一个错误,我无法再将值插入到 PersonData 中。 我想要的结果是,当您在 PersonData 中插入一些内容时,您会在 Bruker 中获得一个新行,该行与 PersonData 中的新条目具有相同的 PersonID。

【问题讨论】:

    标签: mysql sql database triggers


    【解决方案1】:

    您只是通过 NEW

    引用最近插入的行
    CREATE TRIGGER Konsistens 
     AFTER INSERT ON PersonData
    FOR EACH ROW
     INSERT INTO Bruker (BrukerNavn, Passord, PersonId)
     VALUES(NEW.BrukerNavn, NEW.Passord, NEW.PersonId);
    

    【讨论】:

    • 当我使用 new 时,我收到一条错误消息,说它找不到名为 NEW.BrukerNavn 的表。似乎它正在尝试创建一个新表而不是更新我拥有的表。当我将值插入 PersonData 时,就会发生这种情况。
    • 好的,我修好了。结果我只是使用了错误的语法。正确的是 NEW.'PersonID'
    • 这对你来说可以吗?顺便说一句,根据mysql标准,答案中的语法是正确的。如果不是这种情况,您可以编辑答案,然后将其标记为正确的。干杯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多