Как обновить все старые строки в таблице с триггером AFTER / BEFORE INSERT ON в той же таблице в MySQL? - PullRequest
1 голос
/ 11 апреля 2019

Мне нужно обновить столбец состояния всех старых строк таблицы до false до / после добавления новой строки в эту таблицу.

Я посетил их, но не решил мой запрос. MySQL - триггер для обновления той же таблицы после вставки

DELIMITER $$
DROP TRIGGER update_old_status $$
CREATE TRIGGER update_old_status
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
    DECLARE MYCOUNTER INT;
    SELECT COUNT(*) INTO MYCOUNTER FROM table_name;

    IF (MYCOUNTER > 0) THEN
        UPDATE table_name SET status = false WHERE status = true;
    END IF;

END $$
DELIMITER ;

Вот что у меня есть как сообщение об ошибке:

Причина: java.sql.SQLException: Невозможно обновить таблицу 'table_name' в сохраненной функции / триггере, поскольку она уже используется оператором, который вызвал эту сохраненную функцию / триггер.

1 Ответ

1 голос
/ 11 апреля 2019

Вы не можете использовать триггер для обновления той же таблицы, для которой запущен триггер, потому что существует слишком высокий риск создания бесконечного цикла.

Например, триггер вставки обновляет свою таблицу, которая запускает другой триггер при обновлении, который вставляет в ту же таблицу, которая запускает триггер вставки ...

Вы не можете и не должны использовать триггер для этого. Вместо этого используйте транзакцию и запустите ОБНОВЛЕНИЕ до вставки в вашем приложении.

псевдокод:

START TRANSACTION;
UPDATE table_name SET status = false;
INSERT INTO table_name ...values...
COMMIT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...