Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Триггер на удаление 
:(
    Опции темы
aliks
Дата 26.10.2009, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.12.2008

Репутация: нет
Всего: 1



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

Код

CREATE TRIGGER database1.obj_param_value_del
BEFORE DELETE ON database1.object_param_value
FOR EACH ROW
BEGIN
  DECLARE cnt INT;

  SET cnt = (SELECT COUNT(*) FROM objects_params
  WHERE obj_param_value_id = old.id);
  IF cnt > 0 THEN
    ????
  END


Нечто подобное я делал в MSSQL следующим образом

Код

begin
    SET @er='Невозможно удалять документы с помощью незарегистрированного приложения  '+app_name()
    RAISERROR(@er, 16, -1)
        ROLLBACK TRANSACTION
end


Но вот как это реализовать в MySQL  я не знаю

Добавлено через 8 минут и 40 секунд
Решение нашел при использовании связей, поставил в RESTRICT.
А можно ли все таки решить это на триггере?
--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
DimW
Дата 27.10.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(aliks @  26.10.2009,  18:15 Найти цитируемый пост)
 выдавалась какое либо предупреждение

а предупреждения самого сервера бужет достаточно: обнаружина порожденная запись, невозможно удалить строку! (что то типа того...)?
если достаточно, то натяните primary key и foreign key и будет вам счастье.
PM MAIL ICQ   Вверх
Akina
Дата 27.10.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(aliks @  26.10.2009,  19:15 Найти цитируемый пост)
как это реализовать в MySQL  я не знаю

Смотря какая версия мускула. SIGNAL/RESIGNAL - только в шестой версии.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 27.10.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(aliks @  26.10.2009,  18:15 Найти цитируемый пост)
Вот пример моего триггера.

Откройте для себя foreign key.

Приведенное решение на триггере не надежно, в многопользовательском режиме оно фактически не будет работать(если я правильно поинмаю что это оракля).

Это сообщение отредактировал(а) Zloxa - 27.10.2009, 10:49


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 27.10.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(Zloxa @  27.10.2009,  10:49 Найти цитируемый пост)
если я правильно поинмаю что это оракля


Zloxa, ты в форуме по мускулу  smile 
PM MAIL ICQ   Вверх
Zloxa
Дата 27.10.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(DimW @  27.10.2009,  11:15 Найти цитируемый пост)
ты в форуме по мускулу   

Но в качестве примера для иллюстрации задачи приведен код для оракла, который не корректен.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 27.10.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Хотя, не, гоню, какой же это оракл?

aliks, для какой платформы первый пример?


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
aliks
Дата 19.11.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.12.2008

Репутация: нет
Всего: 1



Цитата(Zloxa @  27.10.2009,  12:27 Найти цитируемый пост)
aliks, для какой платформы первый пример? 


Для MySQL, мы в каком разделе?

foreign key это конечно хорошо...а если мне надо сделать так...


Код

CREATE TRIGGER database1.obj_param_value_del
BEFORE DELETE ON database1.object_param_value
FOR EACH ROW
BEGIN
   IF old.id =10 THEN
      ???   УДАЛЕНИЕ НЕ ПРОИЗВОДИТЬ!!!
END


--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
Zloxa
Дата 19.11.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(aliks @  19.11.2009,  10:25 Найти цитируемый пост)
а если мне надо сделать так...

Это плохо если так надо, но если все таки надо, foreign key никоим образом не препятствует созданию триггеров. Просто, по меньшей мере, не целесообразно триггер наполнять функционалом, который реалзиует функционал FK, только делает это хуже.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
aliks
Дата 19.11.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.12.2008

Репутация: нет
Всего: 1



Хорошо, давайте предположим, что у меня таблица не связана с другой, одна единственная....
Так что получается, на триггере нельзя реализовать препятствие для удаления строки определенного значения???

Только что нарыл в инете по теме http://sqlinfo.ru/forum/viewtopic.php?id=946

Это сообщение отредактировал(а) aliks - 19.11.2009, 13:52
--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
zav74
Дата 19.11.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 19.7.2006

Репутация: нет
Всего: нет



Цитата

Это плохо если так надо, но если все таки надо, foreign key никоим образом не препятствует созданию триггеров. Просто, по меньшей мере, не целесообразно триггер наполнять функционалом, который реалзиует функционал FK, только делает это хуже.


А почему плохо. Один раз я даже так сделал(только триггер должен срабатывать ВМЕСТО удаления). Вместо удаления иногда активизировал пустой триггер-таким образом запрещал удаление  из любого инструмента. Но это было в другой СУБД, жаль если здесь нет такого инструмента.
PM MAIL   Вверх
aliks
Дата 19.11.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.12.2008

Репутация: нет
Всего: 1



Цитата(zav74 @  19.11.2009,  14:33 Найти цитируемый пост)
Но это было в другой СУБД, жаль если здесь нет такого инструмента


В том то и дело что у других баз есть такой инструмент
--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.