Триггер перед удалением MySql - PullRequest
4 голосов
/ 22 декабря 2009

У меня есть таблица с именем пользователя. Эта таблица имеет внешний ключ к таблице отдела. Один пользователь может быть связан с одним отделом. Прежде чем удалять отдел, я бы хотел установить для любого пользователя (с таким идентификатором отдела) значение по умолчанию (1), чтобы избежать ошибки ссылочной целостности.

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

Спасибо.

Ответы [ 3 ]

10 голосов
/ 22 декабря 2009

Я не проверял это, но на основе документации , это выглядит примерно так:

CREATE TRIGGER update_user_before_delete BEFORE DELETE ON department
  FOR EACH ROW BEGIN
    UPDATE user SET department = 1 WHERE department = OLD.department;
  END;
3 голосов
/ 22 декабря 2009

В большинстве случаев для дочернего значения лучше установить значение NULL при удалении родителя, а не использовать значение по умолчанию 1, как вы.

Если вы решите, что это поведение подходит, тогда вы можете сделать его атрибутом внешнего ключа и вообще не потребовать триггера.

Примерно так:

ALTER TABLE `user`
ADD CONSTRAINT FK_USER_TO_DEPARTMENT FOREIGN KEY (department_id) 
REFERENCES `department` (department_id) ON DELETE SET NULL;
0 голосов
/ 22 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...