我有错误“#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 触发器中没有新行”的主要内容,如果未能解决你的问题,请参考以下文章
检测碰撞错误说当我有 8 个参数时我有 9 个参数 [重复]
我有这样的问题期待帮助致命错误:未捕获的错误:找不到类'Illuminate\Foundation\Application'[重复]