如何在AWS RDS上设置删除触发器

时间:2019-02-25 17:30:55

标签: amazon-web-services mariadb amazon-rds

我在带有MariaDB 10.3的AWS RDS上进行了设置。我在RDS实例上有几个数据库。我正在尝试使用触发器将表(routes)从一个DB(att)复制到另一个DB(pro)。我有createupdatedelete的触发器。 createupdate触发器工作正常,而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上进行这项工作,需要进行哪些调整?

1 个答案:

答案 0 :(得分:0)

  

其他语句正在使用routes

“其他”查询是调用触发器的查询。

...is already used by [the] statement which invoked this stored function/trigger

不允许触发器修改其自己的表。 BEFORE INSERTBEFORE UPDATE触发器可以在使用NEW别名将当前行写入表之前对其进行修改,但这是触发器可以达到的程度修改定义它的表。

触发are subject to all the same limitations作为存储函数,还有一个存储函数...

  

无法通过调用存储功能的语句对已在使用(读取或写入)的表进行更改。

     

https://mariadb.com/kb/en/library/stored-function-limitations/