(MySQL)我想更新另一个表,并且该表具有触发器。我收到一个错误“因为它已被语句使用”

时间:2019-03-05 00:42:10

标签: mysql triggers

我有两个桌子。

DOG表

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

APPLICATION表

|---------------------------|
| 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

哪个触发器导致错误?我试图解决问题。任何帮助表示赞赏。

0 个答案:

没有答案