【问题标题】:Trigger : insert a row just inserted触发器:插入刚刚插入的行
【发布时间】:2015-04-21 06:15:15
【问题描述】:

我想创建一个触发器,允许我在另一个表中插入我刚刚插入的列。我遵循论坛上的一些建议,所以这是我的触发器创建:

CREATE DEFINER = CURRENT_USER TRIGGER `database`.`Action_AFTER_INSERT` AFTER INSERT ON `Action` FOR EACH ROW BEGIN
INSERT INTO `database`.`StockConnu` (`Action_Isin`)
SELECT `Isin` FROM `inserted`;END;

插入,我的请求:

INSERT INTO `database`.`action`
(`Isin`,
`Valeur`,
`Maj`,
`Devise`)
VALUES
('YHOO',
34,
'2015-02-07',
'euro');

工作台告诉我:

Error Code: 1146. Table 'database.inserted' doesn't exist

我尝试不使用引号和其他语法,但是当我在 Action 中插入数据时它仍然不起作用。

请帮忙...

编辑:

用“新”解决了问题。 zsuzsa-matyas 下面公开的技巧

【问题讨论】:

    标签: mysql sql triggers mysql-workbench


    【解决方案1】:

    我认为问题出在以下几行:

     SELECT Isin FROM inserted;
    

    数据库名称应与其他 INSERT 命令一样指定:

    SELECT NEW.Isin;
    

    【讨论】:

    • 报错信息和之前一样吗?我在触发器方面没有太多经验,因为出于多种原因不建议使用它们 - 所以如果您可以选择使用或不使用它,我建议在没有触发器的情况下解决这个问题(例如,我会创建用于解决此任务的存储过程,每小时/每天运行一次)
    • 同样是的。目前,我正在按照您说的继续进行。但这是第一次,我在 weeb 上找不到任何解决方法:(
    • 我认为插入的项可以这样引用:SELECT NEW.Isin;并且不需要 FROM 子句(仍然不确定,我现在无法在我自己的数据库上检查它 - 让我知道这个语句是否有效)
    • 很高兴听到它有效,我不确定也无法检查:)
    猜你喜欢
    • 2016-05-10
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多