Russian Qt Forum
Апреля 19, 2025, 16:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему не срабатывает триггер  (Прочитано 6206 раз)
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.125 секунд. Запросов: 20.