我在带有MariaDB 10.3的AWS RDS上进行了设置。我在RDS实例上有几个数据库。我正在尝试使用触发器将表(routes
)从一个DB(att
)复制到另一个DB(pro
)。我有create
,update
和delete
的触发器。 create
和update
触发器工作正常,而delete
触发器给出以下错误消息。我已经在本地测试了所有触发器,并且它们都起作用。
我的触发器看起来像这样。
CREATE DEFINER=`root`@`%` TRIGGER routes_delete AFTER DELETE ON
`routes` FOR EACH ROW
BEGIN
DELETE FROM `pro`.`routes`
WHERE `route_id` = OLD.route_id;
END
错误消息
Query execution failed
Reason:
SQL Error [1442] [HY000]: (conn:349208) Can't update table 'routes' in
stored function/trigger because it is already used by statement which
invoked this stored function/trigger
Query is : DELETE FROM `att`.routes WHERE route_code = 78 AND company_id = 3
我不明白使用routes
表的其他语句是什么,因为没有其他链接。要在AWS RDS上进行这项工作,需要进行哪些调整?
答案 0 :(得分:0)
其他语句正在使用
routes
表
“其他”查询是调用触发器的查询。
...is already used by [the] statement which invoked this stored function/trigger
不允许触发器修改其自己的表。 BEFORE INSERT
和BEFORE UPDATE
触发器可以在使用NEW
别名将当前行写入表之前对其进行修改,但这是触发器可以达到的程度修改定义它的表。
触发are subject to all the same limitations作为存储函数,还有一个存储函数...
无法通过调用存储功能的语句对已在使用(读取或写入)的表进行更改。
https://mariadb.com/kb/en/library/stored-function-limitations/