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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ссылочная целостность на триггерах 
:(
    Опции темы
Melancholic
Дата 11.4.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хочу реализовать на триггерах в MySQL поддрежку правил типа NO ACTION ссылочной целостности. То есть есть две таблицы - родительская и дочерняя. Как водится, в дочерней таблице в качестве внешнего ключа присутствует первичный ключ родительской таблицы. Например родительская таблица:
ОТДЕЛ {код отдела, ...}
Дочерняя таблица:
СОТРУДНИК {код сотрудника, код отдела, ...}
Допустим я хочу перевести сотрудника в другой отдел:
Код

UPDATE СОТРУДНИК SET `код отдела` = <какая-то константа С> WHERE СОТРУДНИК.`код сотрудника` = <другая константа С1>;

Если отдела с кодом C не существует, то это приведёт к нарушению целостности. Чтобы этого избежать я создаю триггер:
Код

CREATE TRIGGER `before_update` BEFORE UPDATE on `СОТРУДНИК`
for each row   BEGIN
IF NEW.`код отдела` NOT IN (SELECT `код отдела` FROM `ОТДЕЛ`) THEN
<Вот здесь мой вопрос>
END

На месте строки <Вот здесь мой вопрос> должна быть функция запрета дальнейшего выполнения операции обновления записи в таблице СОТРУДНИК, но я не знаю существует ли такая операция в MySQL.
PM MAIL   Вверх
skaizer
Дата 14.4.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если я не ошибаюсь, то подобный метод можно реализовать с помощью Внешних ключей. Насколько мне известно они гарантируют целостность ссылочной структуры.
А в Вашем примере, насчет прерывания выполнения процедуры я не знаю, я бы создал таблицу ошибок и предупреждений, и обращался бы к ней при ошибках в работе БД.
PM MAIL   Вверх
Melancholic
Дата 25.4.2008, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



К сожалению, MyISAM не поддерживает внешних ключей.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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