SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.10.2007 20:22:49

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

возможности MYSQL сервера в отношении триггеров

Обнаружил что имеются ограничения при создании триггеров:
1. триггер можно создать только на изменения в таблице, а не изменения отдельных полей.
2. нельзя создать несколько триггеров на одну и туже таблицу для одного и того же действия

Вообще то второе было бы возможно если бы не было ограничения по первому пункту.
Может я глупости написал...

и можно создать один триггер на таблицу и проверять в нем не изменились ли нужные поля:
IF OLD.field1<>NEW.field1 THEN
  statements
END;

и не заморачиваться.

P.S. выяснилось что нельзя сделать UPDATE в триггере для таблицы на которую создан триггер, получаю ошибку:
Can't update table 'tlb1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger

что делать ?

Отредактированно Golova (09.10.2007 20:37:31)

Неактивен

 

#2 09.10.2007 20:48:00

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: возможности MYSQL сервера в отношении триггеров

Да, известные ограничения.

Еще можете сюда дописать: "триггер привязан к таблице, а его имя должно быть
уникально в пределах базы данных, а не в пределах таблицы".

Именно поэтому, триггеры именуют каким-то хитрым способом типа 'bi_Table'.
bi = before insert smile

Неактивен

 

#3 09.10.2007 20:57:24

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: возможности MYSQL сервера в отношении триггеров

Делать - не обновлять в том же триггере. Можете использовать слово NEW. для
обновления данных.

Неактивен

 

#4 10.10.2007 10:42:49

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: возможности MYSQL сервера в отношении триггеров

Я всетаки не понял что Вы имели ввиду под:

paulus написал:

Можете использовать слово NEW. для обновления данных.

т.е. изменить одно поле при изменении другого поля одной и тойже таблицы я не смогу сделать всё равно?

Неактивен

 

#5 10.10.2007 10:50:36

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: возможности MYSQL сервера в отношении триггеров

Golova написал:

Я всетаки не понял что Вы имели ввиду под:
т.е. изменить одно поле при изменении другого поля одной и тойже таблицы я не смогу сделать всё равно?

Видимо это такая защита от зацикливания триггера - при изменении другого поля сработает триггер на третье поле. А, скажем, если запрос на изменение всех полей -  как поведет себя триггер?

На самом деле ограничение - то, что триггер нельзя вешать на VIEW. Когда будет можно, Ваше ограничение будет легко обходиться обновлением базовой таблицы или другого VIEW.

Неактивен

 

#6 10.10.2007 11:48:43

Golova
Завсегдатай
Зарегистрирован: 23.03.2007
Сообщений: 92

Re: возможности MYSQL сервера в отношении триггеров

спасибо за ответы, будем искать обходные пути

Неактивен

 

#7 11.10.2007 02:53:21

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: возможности MYSQL сервера в отношении триггеров

Paulus написал:

триггеры именуют каким-то хитрым способом типа 'bi_Table'.

Только не bi_table, а table_bi, table_bu и т.п.

Неактивен

 

#8 11.10.2007 03:31:33

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: возможности MYSQL сервера в отношении триггеров

Golova написал:

изменить одно поле при изменении другого поля одной и тойже таблицы я не смогу сделать всё равно?

Вы можете изменять любые поля для обновляемой (или вновь вставляемой) строки, обращаясь к ним через конструкцию вида

SET NEW.field_name = новое_значение.

Неактивен

 

#9 21.07.2011 16:32:53

Igor Tarasov (ITSoft)
Участник
Зарегистрирован: 21.07.2011
Сообщений: 2

Re: возможности MYSQL сервера в отношении триггеров

А что делать, если я хочу в триггере обновить другую запись? Например, мне надо обновить количество сообщений в ветке?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson