Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Lock tables и вложенные транзакции (Helpix) 14/07/2004 - 16:49:11
      Re: Lock tables и вложенные транзакции (Dinky) 14/07/2004 - 18:07:59

> Original message text:
> From: Helpix - 14/07/2004 - 16:49:11
> Subject:Lock tables и вложенные транзакции
> -----------------
> Прошу помощи клуба и уважаемых магистров.
>
> MySQL, таблицы - BDB, Perl.
> Делаю вложенные транзакции:
>
> sub update1 ( $ )
> {
> my $self = shift;
>
> TransBegin ();
>
> eval {
> $pdb->do( "UPDATE table1 SET..." );
> $pdb->do( "UPDATE table2 SET..." );
> $self->update2();
> };
>
> my $sErr = TransEnd ( $@ );
>
> if ( $sErr ) {
> die "$sErr";
> }
> }
>
> Функция TransBegin увеличивает счетчик вложенности транзакций, TransEnd - уменьшает и если он достигает нуля - делает commin. А при необходимости - делает rollback.
>
> Функция update2 аналогична update1 и также содержит TransBegin и TransEnd. Всё работает, всё отлично и красиво.
>
> Вспоминаю про необходимость блокировки таблиц. И тут выясняется пренеприятнейшая вещь. В общем случае, во внешней транзакции я не обязан знать, какие именно таблицы вглуби мне необходимо блокировать. Соответственно хочется блокировать их по мере необходимости. Т.е: В функции update1 я знаю, что мне понадобится заблокировать table1 и table2. А в update2 я знаю, что необходимо блокировать table3 и table4. При этом в update1 про table3 и table4 мне ничего не известно. Поэтому первое, что мне пришло в голову сделать - это передавать список блокируемых таблиц в TransBegin. А в этой функции каждый раз вызывать lock tables. Т.е. в update1 вызывается TransBegin, которая блокирует table1 и table2. В update2 к ним добавляются table3 и table4 и вызывается lock tables на все четыре таблицы. Как бы взамен предыдущего, который был только на две таблицы.
>
> И вот тут я радостно выясняю, что, оказывается, lock tables насильно вызывает commit для транзакции. Соответственно вся стройная система летит к чертям...
>
> Есть ли мысли, как это дело можно обойти?
>


From: Dinky - 14/07/2004 - 18:07:59
Subject:Lock tables и вложенные транзакции
-----------------
перечитал два раза, все равно не въехал, значит не гожусь пока в магистры :)
зачем надо блокировать таблицы? и как их надо блокировать?
и вообще, как-то дико звучит - табличные блокировки и транзакции :) А на InnoDB сложно перебраться? это, кстати, настоятельно рекомендуется MySQL AB ;)

>Есть ли мысли, как это дело можно обойти?
InnoDB!

--
Dmitry



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
16076



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |