Russian Qt Forum
Сентябрь 30, 2024, 12:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему не срабатывает триггер  (Прочитано 6022 раз)
developer
Гость
« : Февраль 18, 2009, 23:44 »

У меня возникла проблема - есть небольшая сеть (9 компов) и один комп на котором стоит мускуль 5.0.37 и winxp (sp не знаю какой), так вот на етом компе есть база данных, которая имеет несколько триггеров, срабатывают они когда производится вставка или удаление или апдейт некоторой таблицы(только одной) тоесть они вставляють или удаляют записи в некоторую иную таблицу, вот дело в том что ети триггеры срабатывают не всегда, вообще как-то глючно. Какие условия работы могут к етому привести, возможно перегрузить сервер, или переустановить мускуль, или еще что-то... Подскажите пожалуйста, решение нужно найти срочно.
Записан
ритт
Гость
« Ответ #1 : Февраль 19, 2009, 01:19 »

покажи триггер
Записан
developer
Гость
« Ответ #2 : Февраль 19, 2009, 14:11 »

Код:
create trigger insertIntoZayavky after insert on zayavky_zamovnykiv for each row 
begin
insert into zayavky set zayavky.Zajavka_num_zamovnyk = new.id,zayavky.Zamovnyky_id = new.Zamovnyky_id, zayavky.Countrys_id = 1;
insert into zayavky set zayavky.Zajavka_num_zamovnyk = new.id,zayavky.Zamovnyky_id = new.Zamovnyky_id, zayavky.Countrys_id = 2;
end;

create trigger deleteFromZayavky after delete on zayavky_zamovnykiv for each row
begin
delete from zayavky where zayavky.Zajavka_num_zamovnyk = old.id;
end;

create trigger updateInZayavky after update on zayavky_zamovnykiv for each row
begin
update zayavky set zayavky.Zajavka_num_zamovnyk = new.id,zayavky.Zamovnyky_id = new.Zamovnyky_id,zayavky.valuta_id = new.valuta_id where zayavky.Zajavka_num_zamovnyk = old.id;
end;
Вообще-то их  три.
Записан
ритт
Гость
« Ответ #3 : Февраль 19, 2009, 17:15 »

сходу ничего подозрительного не вижу...
а какой именно триггер глючит (или все?)? кроме этих триггеров кто-то ещё пишет в таблицу zayavky? при работе с zayavky используются транзакции?
Записан
developer
Гость
« Ответ #4 : Февраль 19, 2009, 18:18 »

Цитировать
а какой именно триггер глючит (или все?)?
Походу глючит триггер insertIntoZayavky, причем не всегда, где-то у 20% случаев
Цитировать
кроме этих триггеров кто-то ещё пишет в таблицу zayavky?
конечно, в ету таблицу, записывают данные другие пользователи
Цитировать
при работе с zayavky используются транзакции?
транзакции не используются вообще. Да и сама база настроена на неиспользование транзакций

Кстати по поводу етого триггера, он срабатывает как-то пополам - то-есть ета часть(insert into zayavky set zayavky.Zajavka_num_zamovnyk = new.id,zayavky.Zamovnyky_id = new.Zamovnyky_id, zayavky.Countrys_id = 2;) может записаться, ета (insert into zayavky set zayavky.Zajavka_num_zamovnyk = new.id,zayavky.Zamovnyky_id = new.Zamovnyky_id, zayavky.Countrys_id = 1;) нет, или наоборот
Записан
ритт
Гость
« Ответ #5 : Февраль 19, 2009, 18:34 »

так, погоди...а когда триггер не срабатывает должным образом, в zayavky_zamovnykiv запись добавляется? т.е. ошибки триггера не возникает?

а вообще было бы шикарно, если бы предоставил реальный тестовый пример работы с этой базой, дамп базы и конфиг мускуля - можно было бы попробовать определить где именно проблема - в коде или в мускуле.

но как минимум попробуй поставить пятый мускуль с дефолтными настройками. я четвёркой давно уже не пользуюсь, а на пятёрке проблем с триггерами не наблюдал (пока?)
и ещё можно попробовать использовать транзакции при записи в интересующие таблицы.
Записан
developer
Гость
« Ответ #6 : Февраль 19, 2009, 18:59 »

Именно, когда добавляется запись в таблицу zayavky_zamovnykiv, тогда триггер не всегда срабатывает, у меня на локале, все проходит без ошибок, но в етой сети ошибки возникают изредка, тоесть на 10 введенных заявок один раз триггер срабатывает криво. Дамп базы могу дать а вот тестовый пример не получится поскольку надо иметь такую же сеть, еще раз повторяю на локале работает без глюков. В таблице zayavky должно быть в два раза больше записей чем в таблице zayavky_zamovnykiv, там такое места не имеет
Записан
developer
Гость
« Ответ #7 : Февраль 19, 2009, 19:01 »

Конфиг мускуля дефолтный , я там ничего не менял, вообещ туда не лез, версия мускуля 5.0.37, возможно отказатьс яот етих триггеров, и использовать транзакции
Записан
ритт
Гость
« Ответ #8 : Февраль 19, 2009, 20:17 »

транзакции и триггера - разные вещи.

если в zayavky_zamovnykiv строка добавляется, значит триггер срабатывает, т.к. при ошибке триггера откатывается весь процесс. значит, тут дело в чём-то другом. одно из предположений - в момент записи из триггера таблица может быть залокирована сторонней записью (но в таком случае вставка должна произойти после снятия блокировки, а тут почему-то триггер выходит из цикла).

нагрузку в сети вполне можно смоделировать и на одной машине - достаточно лишь создать необходимое количество конкурирующих соединений с реальным чтением и записью данных.
Записан
developer
Гость
« Ответ #9 : Февраль 20, 2009, 11:54 »

Ok?  и как быть
Записан
ритт
Гость
« Ответ #10 : Февраль 20, 2009, 12:11 »

попробуй нагрузить на локальной установке...раз пример для моделирования не даёшь
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 21.