[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Бесконечный цикл?
vital
сабж
CREATE TRIGGER `ChageTimeStamp` AFTER UPDATE ON `Articles` FOR EACH ROW BEGIN
UPDATE Articles SET Articles.changedate=CURRENT_TIMESTAMP() WHERE id=new.id;
END





Спустя 47 секунд vital написал(а):
Как правильно?



Спустя 9 минут (14.10.2010 - 16:09) sergeiss написал(а):
А что ты хочешь сделать? После обновления записи установить время обновления этой записи, выставить его в текущее время?

В MySQL, о котором идет речь, можно ли узнать состояние полей до и после обновления?
В Постгре я бы сделал так:
1. Установил бы триггер на "до апдейта".
2. В триггере проверял бы состояние поля changedate до и после обновления. Если оно не меняется, то это значит, что обновляется что-то другое. Тогда обновление разрешаем, и запускаем обновление даты. Если же дата-время меняются, то это значит, что мы уже как раз находимся на этапе их смены smile.gif Тогда обновление разрешаем, но при этом просто не запускаем обновление даты-времени, чтобы избежать этого "вечного кайфа".

Спустя 1 минута, 35 секунд (14.10.2010 - 16:10) arvitaly написал(а):
Цитата
В MySQL, о котором идет речь, можно ли узнать состояние полей до и после обновления?

можно

Спустя 2 минуты, 17 секунд (14.10.2010 - 16:12) sergeiss написал(а):
arvitaly - спасибо smile.gif Тогда описанный мной алгоритм должен работать и тут.

Спустя 7 минут, 45 секунд (14.10.2010 - 16:20) arvitaly написал(а):
CREATE TRIGGER `ChageTimeStamp` BEFORE UPDATE ON Articles
FOR EACH ROW
BEGIN
SET changedate= CURRENT_TIMESTAMP();
END


А вот так?

Спустя 8 минут, 26 секунд (14.10.2010 - 16:29) sergeiss написал(а):
Цитата (arvitaly @ 14.10.2010 - 17:20)
А вот так?

Может быть, так и проще smile.gif Я чегой-то перемудрил немного... Да, можно и без сравнений, безо всякого анализа, просто "тупо" установить новую величину.

Спустя 1 час, 13 минут, 17 секунд (14.10.2010 - 17:42) vital написал(а):
Цитата (sergeiss @ 14.10.2010 - 13:09)
А что ты хочешь сделать? После обновления записи установить время обновления этой записи, выставить его в текущее время?

В MySQL, о котором идет речь, можно ли узнать состояние полей до и после обновления?
В Постгре я бы сделал так:
1. Установил бы триггер на "до апдейта".
2. В триггере проверял бы состояние поля changedate до и после обновления. Если оно не меняется, то это значит, что обновляется что-то другое. Тогда обновление разрешаем, и запускаем обновление даты. Если же дата-время меняются, то это значит, что мы уже как раз находимся на этапе их смены smile.gif Тогда обновление разрешаем, но при этом просто не запускаем обновление даты-времени, чтобы избежать этого "вечного кайфа".

2sergeiss
Да, я хоче устанавливать время апдейта, что бы не делать это руками в лишним запросом. НАсчет обновления поля. Триггер собственно для того и нужен что бы его обновлять, руками его никто трогать не будет. Суть в том, что майскл впадает в рекурсию=(
То ли я не понял ваш алгоритм, то ли он не поможет тут..
2arvitaly
Тоже падает.

Спустя 3 минуты, 22 секунды (14.10.2010 - 17:45) vital написал(а):
Цитата
просто "тупо" установить новую величину.

Нет. Это все-равно апдейт и рекурсия.

Спустя 18 секунд (14.10.2010 - 17:46) arvitaly написал(а):
У меня не падает - вы прям точно скопировали. Может у вас старый там остался?

Спустя 1 минута, 46 секунд (14.10.2010 - 17:47) arvitaly написал(а):
Я создал таблицу из 3 полей

id, name и tmmf

Записал такой триггер
CREATE TRIGGER trigger1 BEFORE UPDATE ON new_table
FOR EACH ROW
BEGIN
SET NEW.tmmf = CURRENT_TIMESTAMP();
END


Когда меняю name - время меняется все ок ничего не подает


ААА блин я переделал ваш триггер не до конца((( NEW. ССОРИ


_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.