(MySQL) Я хочу обновить другую таблицу, и у этой таблицы есть триггер. и я получаю ошибку «потому что она уже используется оператором»

#mysql #triggers

#mysql #триггеры

Вопрос:

У меня есть две таблицы.

Таблица DOG

 |-----------------------|
| ID | NAME | STATUS_ID |
|-----------------------|
| 1  | Tom  |  1        |
|-----------------------|
  

Таблица ПРИЛОЖЕНИЙ

 |---------------------------|
| ID | DOG_ID | IS_RETURNED |
|---------------------------|
| 1  | 1      |  0          |
|---------------------------|
  

И у меня есть таблица просмотра

 select A.ID, B.ID DOG_ID, B.NAME, A.IS_RETURNED
FROM DOG A
INNER JOIN APPLICATION B
ON A.ID = B.DOG_ID
  

Когда я пытаюсь обновить IS_RETURNED до 1, (обновить набор view_table IS_RETURNED = 1, где DOG_ID = 1) Я получаю ошибку «Не удается обновить таблицу ‘DOG’ в сохраненной функции / триггере, потому что она уже используется оператором, который вызвал эту сохраненную функцию / триггер».

Триггеры

 CREATE TRIGGER `AFTER_UPDATE_DOG` AFTER UPDATE ON `DOG`
 FOR EACH ROW BEGIN
IF NEW.STATUS_ID <> OLD.STATUS_ID AND NEW.STATUS_ID = 2 THEN
    INSERT INTO APPLICATION (DOG_ID, PAYMENT_STATUS_ID, CREATED_DATE) VALUES (NEW.ID, 2, SYSDATE());

    END IF;

    IF NEW.STATUS_ID <> OLD.STATUS_ID AND NEW.STATUS_ID = 1 THEN
    INSERT INTO APPLICATION (DOG_ID, IS_FINALISED, CREATED_DATE) VALUES (NEW.ID, 1, SYSDATE());
    END IF;
END

CREATE TRIGGER `AFTER_INSERT_DOG` AFTER INSERT ON `DOG`
 FOR EACH ROW UPDATE DOG SET AGE = NEW.ID WHERE ID = NEW.ID

CREATE TRIGGER `AFTER_UPDATE_APPLICATION` AFTER UPDATE ON `APPLICATION`
 FOR EACH ROW BEGIN
IF NEW.IS_RETURNED <> OLD.IS_RETURNED AND NEW.IS_RETURNED = 'Yes' THEN
        UPDATE DOG SET STATUS_ID = 3 WHERE ID = NEW.DOG_ID;
    END IF;
END
  

Какой триггер вызывает ошибку? Я пытаюсь решить проблему. Любая помощь приветствуется.

Комментарии:

1. Какой запрос вы запускаете, чтобы обновить IS_RETURNED до 1 , т. Е. какой запрос генерирует ошибку?

2. У меня есть представление, которое объединяет таблицу DOG и таблицу Application. и «Обновить набор View_table IS_RETURNED = 1, где DOG_ID = 1

3. Что, если вы обновите Application таблицу напрямую, вы получите ту же ошибку? UPDATE application SET IS_RETURNED = 1 where DOG_ID = 1

4. Нет, я не получаю никакой ошибки. но мне нужно обновить view table. Я создаю таблицу на WordPress и использую плагин wpDataTable. Мне нужно использовать view table, чтобы глобальный поиск работал в wpDataTable (глобальный поиск не работает в запросах объединения)

5. Вы пытались просто UPDATE application ... , а затем посмотреть, отражаются ли изменения в представлении? Это может просто сработать.