лог значения в базе

Статус
В этой теме нельзя размещать новые ответы.
селект возвращает 'null', после вы пытаетесь вставить 'null' в поле, которые не может быть 'null', рекомендую воспользоваться функцие IFNULL
Код:
INSERT INTO `log` SET `msg` = 'update', old = IFNULL(@summ,0);
 
mysql> CREATE TRIGGER `update` AFTER update ON `pr_table` FOR EACH ROW BEGIN SET @summ = (select sum(OLD.YYY) FROM `pr_table`); INSERT INTO `log` SET `msg` = 'update', old = IFNULL(@summ,0); END;
ERROR 1064 (42000:( You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Query OK, 1 row affected, 1 warning (0.38 sec)
ERROR 1064 (42000:( You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 1
 
попробуйте так
Код:
delimiter //
CREATE TRIGGER `update` AFTER update ON `pr_table` FOR EACH ROW BEGIN SET @summ = (select sum(OLD.YYY) FROM `pr_table`); INSERT INTO `log` SET `msg` = 'update', old = IFNULL(@summ,0); END; //
delimiter ;
 
попробуйте так
Спасибо большое, вроде бы получилось, по крайней мере триггер создался, насчет работоспособности не проверил еще. DELIMITTER он для чего, я думал его функция только для того, что бы остановить выполнение команды клавиши ентер
 
DELIMITTER используется для определения разделителя запросов, по умолчанию это точка с запятой, поэтому сервер разбивал запрос создания триггера на несколько запросов и не знал к чему относится оператор 'END'
 
попробуйте так
Код:
delimiter //
CREATE TRIGGER `update` AFTER update ON `pr_table` FOR EACH ROW BEGIN SET @summ = (select sum(OLD.YYY) FROM `pr_table`); INSERT INTO `log` SET `msg` = 'update', old = IFNULL(@summ,0); END; //
delimiter ;

А как можно сумму получить до и после в теле одного триггера, здесь если написать sum(OLD.YYY) или sum(NEW.YYY), черт знает какие цифры дает, если просто sum(YYY), то правильно возвращает значение, но тогда надо два триггера создавать AFTER и BEFORE
 
создаете триггер BEFORE, в теле триггера вычисляете первоначальную сумму sum(YYY), после расчитываете новую сумму sum(YYY)-OLD.YYY+NEW.YYY.
OLD.Field и NEW.Field содержат значение поля Field одной конкретной строки, над которой производится какя-либо операция.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху