SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.02.2011 13:11:52

Seuren
Участник
Зарегистрирован: 10.02.2011
Сообщений: 7

Есть проблема с триггерами

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

Вопрос: насколько корректен следующий кусок кода? Что надо поменять? Вероятнее всего я синтаксически что-то неправильно описываю.. только вот что именно мне пока не понятно(


CREATE TRIGGER `insert_consultant` BEFORE INSERT ON `Consultant`
FOR EACH ROW BEGIN
    IF NEW.SponsorContructNumber IS NOT NULL THEN BEGIN
           DECLARE D INT default 0;
        SET D = (SELECT 'Deep' FROM 'Consultant' WHERE pk=NEW.SponsorContructNumber);
        SET NEW.Deep = D + 1;
        SET NEW.LeftIndex = (SELECT 'RightIndex' FROM 'Consultant' WHERE pk=NEW.SponsorContructNumber);
        SET NEW.RightIndex = NEW.LeftIndex + 1;
                //дополнительные изменения полей остальных записей
        END
END
 

Отредактированно Seuren (10.02.2011 14:21:34)

Неактивен

 

#2 10.02.2011 23:46:24

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

Re: Есть проблема с триггерами

А текст ошибки какой?

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

Неактивен

 

#3 11.02.2011 07:03:49

Seuren
Участник
Зарегистрирован: 10.02.2011
Сообщений: 7

Re: Есть проблема с триггерами

сама структура дерева имеет вид (id, Level, Left, Rigth, <доп поля>).. само устройство дерева вполне нормально и корректно. Проблема состоит в том, что я сам триггер не могу создать - выдается сообщение о синтаксической ошибке. ошибка типа "ты вот тут что-то не так наверно написал "" в строке №"

Неактивен

 

#4 11.02.2011 09:20:37

Seuren
Участник
Зарегистрирован: 10.02.2011
Сообщений: 7

Re: Есть проблема с триггерами

с проблемой создания триггера вроде рзобрался.. теперь вот только при попытке добавить новую запись выдает:

#1436 - Thread stack overrun:  7188 bytes used of a 131072 byte stack, and 128000 bytes needed.  Use 'mysqld -O thread_stack=#' to specify a bigger stack.

Причем ему совсем не важно, что находится в теле триггераsad

Отредактированно Seuren (11.02.2011 09:21:28)

Неактивен

 

#5 11.02.2011 11:53:23

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

Re: Есть проблема с триггерами

Да, debian в этом месте был не прав wink Или закомментируйте строку в файле
конфигурации, или поставьте значение побольше. 128К не хватает.

Неактивен

 

#6 11.02.2011 11:57:34

Seuren
Участник
Зарегистрирован: 10.02.2011
Сообщений: 7

Re: Есть проблема с триггерами

Спасибо) помогло)  Есть еще один интересный вопрос. Насколько я знаю в триггере нельзя изменять строки в таблице напрямую. Существует ли возможность это обойти? Пока есть мысль использовать вызовы процедур, которые и будут вносить изменения.

Неактивен

 

#7 11.02.2011 12:11:54

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

Re: Есть проблема с триггерами

В этой же таблице нельзя, потому что «рекурсия: см рекурсия». А в других
таблицах никто не запрещал smile

Неактивен

 

#8 11.02.2011 12:25:37

Seuren
Участник
Зарегистрирован: 10.02.2011
Сообщений: 7

Re: Есть проблема с триггерами

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

Неактивен

 

Board footer

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