我有错误“#1363 - DELETE 触发器中没有新行”

Posted

技术标签:

【中文标题】我有错误“#1363 - DELETE 触发器中没有新行”【英文标题】:I have error "#1363 - There is no NEW row in on DELETE trigger " 【发布时间】:2015-06-01 15:36:51 【问题描述】:

我有表“book”和“store_order”有关系

我想触发(但它包含错误):

DELIMITER $$

CREATE TRIGGER t1 
before delete ON store_order
FOR EACH ROW 
BEGIN

    update book set number = number + NEW.quantity where ISBN = NEW.ISBN;

END
$$

DELIMITER ;

【问题讨论】:

如果你想访问要删除的行的数据,你应该使用 :old 变量。由于没有要插入的新行(因为它是删除行触发器),因此您不能在此处使用 :new。 这和 CSS 有什么关系? 我在删除之前这样做,我想在其他表中更新。 Delete row with a mysql Trigger的可能重复 我只想更正“更新行”有什么问题就可以了:) 【参考方案1】:
DELIMITER $$
CREATE
    TRIGGER t2 AFTER delete 
    ON library.store_order
    FOR EACH ROW BEGIN

        update library.book 
        set library.book.number = (library.book.number + OLD.quantity)
        where library.book.ISBN = OLD.ISBN;

    END$$
DELIMITER ;

【讨论】:

【参考方案2】:

当您想要获取已删除的对象时,请使用 OLD 而不是 NEW。

以我的情况为例。我通过调用获取新添加角色的 id

新.id

并在删除时通过调用获取相同字段的值

OLD.id

例子:

DELIMITER $$
CREATE TRIGGER after_insert_role
AFTER INSERT ON role FOR EACH ROW
 BEGIN
   INSERT INTO `sync_mapping`
 (`operation_type`, `table_name`, `oid`, `end_point`) 
  VALUES
 ('insert', 'role', NEW.id, 'new/role');
END $$


 DELIMITER $$
  CREATE TRIGGER after_delete_role
  AFTER DELETE ON role FOR EACH ROW
   BEGIN
    INSERT INTO `sync_mapping` (`operation_type`, `table_name`, `oid`, `end_point`)        VALUES
  ('delete', 'role', OLD.id, 'delete/role');
END $$

【讨论】:

【参考方案3】:

每当我们删除数据时 使用

旧的。而不是新的。

在每行删除用户后创建触发器 user_history_delete 插入用户历史记录(操作,名称) VALUES(“删除”,OLD.name);

【讨论】:

以上是关于我有错误“#1363 - DELETE 触发器中没有新行”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我有这个 laravel 错误?

我有错误“TypeError:'type'对象不可下标”

检测碰撞错误说当我有 8 个参数时我有 9 个参数 [重复]

我有一个错误,我不确定它为啥不工作(线程)

我有这样的问题期待帮助致命错误:未捕获的错误:找不到类'Illuminate\Foundation\Application'[重复]

错误 C2512 但我有可用的默认构造函数