powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ошибка триггера на UPDATE
9 сообщений из 9, страница 1 из 1
Ошибка триггера на UPDATE
    #39833617
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Код: sql
1.
DROP TRIGGER IF EXISTS `1`;CREATE DEFINER=`admin_cibocenka`@`localhost` TRIGGER `1` AFTER UPDATE ON `tbl_consumer` FOR EACH ROW BEGIN IF(NEW.name_company!=OLD.name_company) THEN UPDATE tbl_consumer SET name_consumer = NEW.name_company; END IF; IF(NEW.fio_consumer!=OLD.fio_consumer) THEN UPDATE tbl_consumer SET name_consumer = NEW.fio_consumer; END IF; END



Прошу помочь исправить ошибку, которая появляется при выполнении тригера.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BEGIN

IF(NEW.name_company!=OLD.name_company) THEN
UPDATE tbl_consumer SET name_consumer = NEW.name_company;	
END IF;

IF(NEW.fio_consumer!=OLD.fio_consumer) THEN
UPDATE tbl_consumer SET name_consumer = NEW.fio_consumer;

END IF;

END
...
Рейтинг: 0 / 0
Ошибка триггера на UPDATE
    #39833624
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что делает этот триггер? А делает он следующее - если текущий UPDATE запрос изменяет значение поля name_company в одной записи, то установить значение поля name_consumer равным новому значению name_company для всех записей таблицы. И то же самое для поля fio_consumer. Ну то есть бред голимый, не иначе...

А чтобы помочь исправить, надо понимать, что же должен на самом деле делать этот триггер. Но из исходного сообщения это понять невозможно в принципе.
...
Рейтинг: 0 / 0
Ошибка триггера на UPDATE
    #39833630
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, благодарю за неравнодушие.

Задача: при любом изменении в поле "name_company", записать новое значение в поле "name_consumer" соответствующей строки.
при любом изменении в поле "fio_consumer", записать новое значение в поле "name_consumer" соответствующей строки.

Физически пользователь может менять только или "name_company", или "fio_consumer"
...
Рейтинг: 0 / 0
Ошибка триггера на UPDATE
    #39833634
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил условие WHERE, но все-равно ошибка та же, что на скрине

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
BEGIN

IF(NEW.name_company!=OLD.name_company) THEN
UPDATE tbl_consumer SET name_consumer = NEW.name_company WHERE id_consumer = OLD.id_consumer;	
END IF;

IF(NEW.fio_consumer!=OLD.fio_consumer) THEN
UPDATE tbl_consumer SET name_consumer = NEW.fio_consumer WHERE id_consumer = OLD.id_consumer;

END IF;

END
...
Рейтинг: 0 / 0
Ошибка триггера на UPDATE
    #39833668
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE 
DEFINER=`admin_cibocenka`@`localhost` 
TRIGGER `1` 
BEFORE UPDATE 
ON `tbl_consumer` 
FOR EACH ROW
SET NEW.name_consumer = CASE WHEN NEW.name_company!=OLD.name_company
                             THEN NEW.name_company
                             WHEN NEW.fio_consumer!=OLD.fio_consumer
                             THEN NEW.fio_consumer
                             ELSE NEW.name_consumer
                        END;
...
Рейтинг: 0 / 0
Ошибка триггера на UPDATE
    #39833671
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основные ошибки.

1) Триггер работает с ОДНОЙ записью - той, которая в данный момент изменяется. Т.е. нет никакой необходимости апдейтить всю таблицу, выбирая ту же запись, ибо все её значения (и старые, и новые) доступны через псевдотаблицы OLD и NEW.

2) Изменение обновляемых (новых) значений бессмысленно пытаться делать в триггере AFTER - ведь на этот момент обновление уже выполнено. Гораздо проще заменить новые значения в BEFORE триггере, чтобы обновление прошло именно ими, а не тем, что подавалось из запроса.
...
Рейтинг: 0 / 0
Ошибка триггера на UPDATE
    #39833855
quickstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, благодарю Вас.
Ррработает!)
Не скажу, что я все понял, но всё же чуть прояснилось.
Я хотел реализовать через If THEN ELSE
...
Рейтинг: 0 / 0
Ошибка триггера на UPDATE
    #39833877
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstarхотел реализовать через If THEN ELSECASE и есть множественный IF - THEN - ELSEIF - ELSE
...
Рейтинг: 0 / 0
Ошибка триггера на UPDATE
    #39833950
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quickstar,

Если по вашему примеру, попробуйте так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
..
BEGIN

IF(NEW.name_company!=OLD.name_company) THEN
SET NEW.name_consumer = NEW.name_company;	
END IF;

IF(NEW.fio_consumer!=OLD.fio_consumer) THEN
SET NEW.name_consumer = NEW.fio_consumer;

END IF;

END

..



Недавно потихоньку стал переносить часть логики с клиента на сервер, пришлось поплотней окунуться в mysql , позавчера с такой же ошибкой столкнулся)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ошибка триггера на UPDATE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]