SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 24.01.2011 21:19:41

krite
Участник
Зарегистрирован: 24.01.2011
Сообщений: 4

Помогите с триггерами

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

Допустим есть таблица user в нём
- Id
- Name
- Surname

есть такие данные.
-1
-Вася
-Пупкин

-2
-Максим
-Зернов

-3
-Алла
-Пугачёва

Когда вставляем новую запись например с ID - 2, нужно что бы триггер сравнил New.Id с уже имеющимися  айдишниками и если такой есть, вызывал ошибку, такое можно сделать?

Неактивен

 

#2 24.01.2011 23:52:26

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

Re: Помогите с триггерами

Гораздо проще сделать уникальный индекс по ID, тогда такая проверка будет
производиться автоматически.

Неактивен

 

#3 25.01.2011 01:38:14

krite
Участник
Зарегистрирован: 24.01.2011
Сообщений: 4

Re: Помогите с триггерами

К сожалению мне нужно научится делать это через триггеры) Но сам не смог найти ничего похожего в интернете... ( 4 день мучаюсь над этим вопросом)

Неактивен

 

#4 25.01.2011 04:13:35

krite
Участник
Зарегистрирован: 24.01.2011
Сообщений: 4

Re: Помогите с триггерами

Разобрался как сделать... но теперь хочу, что бы выдавало ошибку... Например

IF @a > 0 THEN
ошибка
END IF;

Как это сделать? т.к. у меня такие проверки не только на Insert, но и на Update и Delete smile

Отредактированно krite (25.01.2011 04:14:25)

Неактивен

 

#5 25.01.2011 11:42:09

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

Re: Помогите с триггерами

В MySQL 5.5 для этого можно использовать SIGNAL.

В 5.1 и 5.0 хорошего способа, к сожалению, нет. Можно использовать всяческие
костылики (например, ошибку отсутствия таблицы):
SELECT 1 FROM ERROR_DUPLICATE_KEY;

Обычно я предлагаю в качестве ошибки вставить строку и сгенерировать duplicate
key, но у Вас странное ограничение на неиспользование уникальных индексов wink

Неактивен

 

#6 25.01.2011 17:16:19

krite
Участник
Зарегистрирован: 24.01.2011
Сообщений: 4

Re: Помогите с триггерами

paulus написал:

В MySQL 5.5 для этого можно использовать SIGNAL.

В 5.1 и 5.0 хорошего способа, к сожалению, нет. Можно использовать всяческие
костылики (например, ошибку отсутствия таблицы):
SELECT 1 FROM ERROR_DUPLICATE_KEY;

Обычно я предлагаю в качестве ошибки вставить строку и сгенерировать duplicate
key, но у Вас странное ограничение на неиспользование уникальных индексов wink

Большое спасибо за помощь) ну вот такую вот поставили задачу ) просто мне нужно не только такую проверку делать на Insert или Update но и на Delete, а там нужно сравнивать с другой таблицей ) но к счастью я разобрался с вашей помощью) Спасибо ещё раз)

Неактивен

 

Board footer

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