Ошибка INSERT при попытке обновить ранее вставленные строки - PullRequest
0 голосов
/ 10 сентября 2018

Структура моей таблицы:

id  id_pp id_a id_u     fecha_accion       tiempo
25    6     2   6     2018-07-06 11:53:44   NULL
26    6     3   3     2018-07-06 12:11:13   NULL
59    6     2   6     2018-07-10 10:37:28   NULL
63    6     3   3     2018-07-10 11:03:49   NULL
64    6     5   3     2018-07-10 11:03:56   NULL
65    6     7   3     2018-07-10 11:04:05   NULL
66    6     6   3     2018-07-10 11:04:08   NULL
67    6     8   3     2018-07-10 11:04:13   NULL
68    6     9   3     2018-07-10 11:04:21   NULL

примечание: fecha_accion это отметка времени.

И я хочу обновить предыдущие строки с помощью триггера, но не могу, есть идеи?

ПУСК:

DROP TRIGGER IF EXISTS vtas_historial_acciones_BEFORE_INSERT;

DELIMITER //
CREATE TRIGGER `vtas_historial_acciones_BEFORE_INSERT` BEFORE INSERT ON vtas_historial_acciones 
FOR EACH ROW
BEGIN

    SET @id = (select id from vtas_historial_acciones where id_pp = new.id_pp order by id desc limit 1);
    SET @fecha = (select fecha_accion from vtas_historial_acciones where id_pp = new.id_pp order by id desc limit 1);

    UPDATE vtas_historial_acciones SET  `tiempo` = TIMESTAMPDIFF(HOUR,@fecha_accion,NOW()) where id = @id;
END; //

DELIMITER ;

ОШИБКА:

1442 - Невозможно обновить таблицу 'vtas_historial_acciones' в сохраненной функции / триггере, поскольку она уже используется оператором, который вызвал эту сохраненную функцию / триггер.

1 Ответ

0 голосов
/ 12 сентября 2018

В триггере вы можете изменять значения только для текущей записи, используя оператор SET NEW.<column name> = value. Но невозможно обновить записи другой таблицы в триггере.

В этом случае я бы предложил вам выполнить следующие шаги:

  1. открытая транзакция
  2. обновить таблицу с предыдущими значениями
  3. вставить новую запись в таблицу
  4. закрыть сделку
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...