【问题标题】:I have error "#1363 - There is no NEW row in on DELETE trigger "我有错误“#1363 - DELETE 触发器中没有新行”
【发布时间】: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 有什么关系?
  • 我在删除之前这样做,我想在其他表中更新。
  • 我只想更正“更新行”有什么问题就可以了:)

标签: mysql sql phpmyadmin


【解决方案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);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-22
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-04
        相关资源
        最近更新 更多