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 до и после обновления. Если оно не меняется, то это значит, что обновляется что-то другое. Тогда обновление разрешаем, и запускаем обновление даты. Если же дата-время меняются, то это значит, что мы уже как раз находимся на этапе их смены Тогда обновление разрешаем, но при этом просто не запускаем обновление даты-времени, чтобы избежать этого "вечного кайфа".
В MySQL, о котором идет речь, можно ли узнать состояние полей до и после обновления?
В Постгре я бы сделал так:
1. Установил бы триггер на "до апдейта".
2. В триггере проверял бы состояние поля changedate до и после обновления. Если оно не меняется, то это значит, что обновляется что-то другое. Тогда обновление разрешаем, и запускаем обновление даты. Если же дата-время меняются, то это значит, что мы уже как раз находимся на этапе их смены Тогда обновление разрешаем, но при этом просто не запускаем обновление даты-времени, чтобы избежать этого "вечного кайфа".
Спустя 1 минута, 35 секунд (14.10.2010 - 16:10) arvitaly написал(а):
Цитата |
В MySQL, о котором идет речь, можно ли узнать состояние полей до и после обновления? |
можно
Спустя 2 минуты, 17 секунд (14.10.2010 - 16:12) sergeiss написал(а):
arvitaly - спасибо Тогда описанный мной алгоритм должен работать и тут.
Спустя 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) |
А вот так? |
Может быть, так и проще Я чегой-то перемудрил немного... Да, можно и без сравнений, безо всякого анализа, просто "тупо" установить новую величину.
Спустя 1 час, 13 минут, 17 секунд (14.10.2010 - 17:42) vital написал(а):
Цитата (sergeiss @ 14.10.2010 - 13:09) |
А что ты хочешь сделать? После обновления записи установить время обновления этой записи, выставить его в текущее время? В MySQL, о котором идет речь, можно ли узнать состояние полей до и после обновления? В Постгре я бы сделал так: 1. Установил бы триггер на "до апдейта". 2. В триггере проверял бы состояние поля changedate до и после обновления. Если оно не меняется, то это значит, что обновляется что-то другое. Тогда обновление разрешаем, и запускаем обновление даты. Если же дата-время меняются, то это значит, что мы уже как раз находимся на этапе их смены Тогда обновление разрешаем, но при этом просто не запускаем обновление даты-времени, чтобы избежать этого "вечного кайфа". |
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
Записал такой триггер
Когда меняю name - время меняется все ок ничего не подает
ААА блин я переделал ваш триггер не до конца((( NEW. ССОРИ
id, name и tmmf
Записал такой триггер
CREATE TRIGGER trigger1 BEFORE UPDATE ON new_table
FOR EACH ROW
BEGIN
SET NEW.tmmf = CURRENT_TIMESTAMP();
END
Когда меняю name - время меняется все ок ничего не подает
ААА блин я переделал ваш триггер не до конца((( NEW. ССОРИ
_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar