Как проверить строку данных в MySQL с помощью триггеров? - PullRequest
2 голосов
/ 20 августа 2010

Я хочу быть уверенным, что в моем списке нет детей детей.Поэтому, если у меня есть родительский элемент A и дочерний элемент B (B.parent = A), и я пытаюсь вставить дочерний элемент C в элемент B (C.parent = B), этот триггер должен предотвратить его иустановите parent_id для C на A (C.parent = A).Мне нужно только 2 уровня в моей таблице (родитель-ребенок) и никаких дедушек.

Вот мой образец, который не работает:

DELIMITER //
CREATE TRIGGER parent_control BEFORE insert ON reports
FOR EACH ROW BEGIN
IF new.parent_id is not null THEN
  set @parent_parent_id = new.parent_id;
  SELECT parent_id FROM reports INTO parent_parent_id WHERE report_id = new.parent_id;
  IF @parent_parent_id is not null THEN
    SET new.parent_id = @parent_parent_id;
  END IF;
END IF;
END; 

Он говорит: # 1327 -Необъявленная переменная: parent_parent_id

1 Ответ

0 голосов
/ 20 августа 2010

может захотеть проверить имена полей, типы данных и т. Д., Но что-то вроде этого может работать

delimiter #

create trigger reports_before_ins_trig before insert on reports
for each row
proc_main:begin

declare pid smallint unsigned default null;

  if new.parent_id is null then
    leave proc_main;
  end if;

  select parent_id into pid from reports where report_id = new.parent_id;

  if pid is not null then 
    set new.parent_id = pid;
  end if;

end proc_main #

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