Как настроить триггер удаления в AWS RDS? - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть настройка на AWS RDS с MariaDB 10.3.У меня есть несколько БД на экземпляре RDS.Я пытаюсь реплицировать таблицу (routes) из одной БД (att) в другую БД (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?

1 Ответ

0 голосов
/ 26 февраля 2019

какой другой оператор использует таблицу routes

«Другой» запрос - это запрос, который вызвал триггер.

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

Триггеру не разрешено изменять свою собственную таблицу.Триггеры BEFORE INSERT и BEFORE UPDATE могут изменять текущую строку до ее записи в таблицу с использованием псевдонима NEW, но это степень, в которой триггер может изменять таблицу, в которой она определена..

Триггеры подчиняются всем тем же ограничениям , что и хранимые функции, и хранимой функции ...

Невозможно внести изменения в таблицу, которая уже существуетиспользуется (чтение или запись) оператором, вызывающим хранимую функцию.

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

...