Мой MySQL после триггера INSERT не работает? Почему?

Я создал триггер, похожий на следующий:

delimiter //
CREATE TRIGGER update_total_seconds_on_phone AFTER INSERT
ON cdr 
FOR EACH ROW 
BEGIN
IF NEW.billsec > 0 AND NEW.userfield <> NULL THEN
UPDATE foo
SET total_seconds = total_seconds + NEW.billsec
WHERE phone_id = NEW.userfield;
END IF;

END;//

Вроде все нормально проходит. Однако, похоже, он не запускается, когда мне это нужно. Вот пример:

mysql> select total_seconds from foo where phone_id = 1;
+---------------+
| total_seconds |
+---------------+
|             0 | 
+---------------+
1 row in set (0.00 sec)

mysql> вставить в cdr (billsec, userfield) VALUES (60, 1); Запрос выполнен, затронута 1 строка, 12 предупреждений (0,00 сек)

mysql> select total_seconds from foo where phone_id = 1;
+---------------+
| total_seconds |
+---------------+
|             0 | 
+---------------+

Обновлено: предупреждения в этом конкретном случае не влияют на триггер. В основном это дополнительные столбцы, которые не имеют значений по умолчанию в таблице cdr, которые вызывают предупреждения. Для простоты я сделал свой оператор INSERT кратким.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
3 132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сгенерировано 12 предупреждений. Кто они такие?

ETA: Ой, подождите ... вам нужно использовать is not null, а не <> null. Любое сравнение с null всегда возвращает null.

Странно, но это сработало. Любая идея, почему в этом случае работает IS NOT NULL, а <> NULL - нет? Спасибо!

anon 21.10.2008 22:14

Как сказал KernelM, любое сравнение с NULL возвращает NULL. Это означает, что оба = NULL и <> NULL всегда равны NULL, что фактически неверно. Это стандартное поведение SQL.

Bill Karwin 22.10.2008 01:26

Другие вопросы по теме