Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание триггера на апдейт записи в текущей таблице / 6 сообщений из 6, страница 1 из 1
08.05.2018, 13:58
    #39642008
Василий2k18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на апдейт записи в текущей таблице
Добрый день! Возникла проблема, нужно было сделать триггер, на апдейт записи в конкретной таблице, у которой sims_id совпадает с sims_id новой записи (То есть когда добавляется новая запись с таким же sims_id, у старой записи должен поставиться date_end равный date_start новой записи).

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

id

sims_id

status_id

date_start (Default: CURRENT_TIMESTAMP)

date_end

Код создания триггера:

DELIMITER //
CREATE TRIGGER sims_date_end
BEFORE INSERT ON SimsToStatus
FOR EACH ROW
BEGIN
UPDATE SimsToStatus
SET date_end = NEW.date_start
WHERE date_end is null
and status_id is not null
and sims_id = NEW.sims_id
order by id desc limit 1;
END;

При этом триггер теперь не дает добавлять новые записи и при попытке инсертить запись с sims_id, который уже есть в таблице - выдает:

[HY000][1442] Can't update table 'SimsToStatus' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Подскажите кто сталкивался, в чем тут проблема?
...
Рейтинг: 0 / 0
08.05.2018, 14:13
    #39642022
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на апдейт записи в текущей таблице
Василий2k18в чем тут проблема?Проблема именно в том, что и написано - нельзя в триггере менять данные в других записях таблицы, действие на которой вызывает срабатывание триггера. Потому что это потенциально может привести к зацикливанию обработки..

Выносите логику добавления/обновления в хранимую процедуру.
...
Рейтинг: 0 / 0
08.05.2018, 14:21
    #39642029
Василий2k18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на апдейт записи в текущей таблице
Понял вас. Спасибо большое что направили ход мыслей в верное русло!
...
Рейтинг: 0 / 0
08.05.2018, 14:49
    #39642039
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на апдейт записи в текущей таблице
Василий2k18 , лучше сначала вставляйте, потом проверяйте, что вставка выполнена, и только при положительном итоге проверки выполняйте обновление. Это я к тому, что Ваше изначальное TRIGGER BEFORE INSERT было ошибочным.
...
Рейтинг: 0 / 0
08.05.2018, 15:19
    #39642062
Василий2k18
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на апдейт записи в текущей таблице
Akina,
Понял, то есть нужно использовать After Insert?
...
Рейтинг: 0 / 0
08.05.2018, 19:57
    #39642187
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера на апдейт записи в текущей таблице
Да обновлять существующую запись надо только после удачной вставки новой.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Создание триггера на апдейт записи в текущей таблице / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]