2014-11-20 4 views
1

Я хочу создать триггер, который обновляет последний_модифицированный столбец измененной строки до текущего времени. Это то, что я придумал, но когда я пытаюсь обновить строку после создания триггера, это не позволит мне.Обновление MySQL Trigger

delimiter $$ 
create trigger survey_responder_modified 
after update on survey_responders 
for each row 
begin 
    update survey_responders 
    set last_modified = now(); 
end 
$$ 

ответ

1

Вы можете попробовать этот пример код триггера

Для добавить текущую дату в data_create колонки в Новом Insert Row

CREATE TRIGGER trigger_DatetimeInsert BEFORE INSERT ON tableName FOR EACH ROW 
BEGIN 
    SET NEW.date_create = NOW(); 
END; 

Для добавить текущую дату в data_modify колонки в Новом Modified Их

CREATE TRIGGER trigger_DatetimeModify BEFORE UPDATE ON tableName FOR EACH ROW 
BEGIN 
    SET NEW.date_modify = NOW(); 
END; 
+0

Спасибо. Это сработало. – Dusster

0

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

Теперь MySQL может быть достаточно умным, чтобы этого не было, но я бы не поставил на нем, особенно когда есть более простой способ.

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

Это было бы что-то по следующим направлениям:

create trigger survey_responder_inserting 
    before insert on survey_responders 
    for each row set new.last_modified = now(); 
create trigger survey_responder_updating 
    before update on survey_responders 
    for each row set new.last_modified = now(); 

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

+0

Я попытался изменить его раньше, но он все равно не позволит мне обновлять таблицу после создания триггеров. Я получаю ошибку Код ошибки: 1442. Невозможно обновить таблицу 'survey_ответчиков' в хранимой функции/триггере, потому что она уже используется оператором, который вызывал эту хранимую функцию/триггер. – Dusster

+0

Когда я попробовал свой код, он дал мне еще одну ошибку: «Неизвестная системная переменная« last_modified » – Dusster

+0

@Dusster, извинения за это, слева от« нового »спецификатора, исправлено. – paxdiablo

Смежные вопросы