|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/371.32 01 Aug 2000 12:00:54 To : Sergey Potapenko Subject : Re: Транзакции в DBI:* -------------------------------------------------------------------------------- <Sergey_Potapenko@p122.f166.n463.z2.fidonet.org> wrote: SP> Оцените следующий код пожалуйста, согласно документации вроде бы всё SP> правильно, но непонятно несколько вещей: SP> - Как управлять уровнем изоляции транзакции ? Исполнением соответствующего SQL-выражения. SP> - Где и когда начинается транзакция ? Автоматически. SP> Явного вызова $dbh->starttransaction нет ? Hет. Можно считать, что commit или rollback автоматически начинает следующую транзакцию. SP> Или она начнётся с первого вызова INSERT, UPDATE ... ? Вообще говоря, зависит от драйвера. Положено начинать с первого вызова, который может изменить содержимое базы, или раньше, в зависимости от интеллекта базы и драйвера. При достаточно продвинутом интеллекте транзакция может начинаться с вызова, реально изменяющего базу (средствами самой базы, естественно). SP> # Получить коннект к базе без использования AutoCommit SP> $dbh = DBI->connect('DBI:driver:base:host:port', $user, $password, SP> {RaiseError => 1, PrintError => 1, AutoCommit => 0}) SP> || die $DBI::errstr; SP> eval { SP> ... действия над данными в базе SP> }; SP> if ($@) { SP> ... $dbh->commit; SP> } else { SP> ... $dbh->rollback; SP> }; Hаоборот. if ($@) надо делать rollback, а коммит - только если все живы. PrintError, наверное, лучше в 0, если у тебя RaiseError 1. Тогда ты сможешь управлять выводом сообщений. -- Счастливо! Ран. --- ifmail v.2.14.os-p7-tma3 * Origin: MemoNet (2:5020/371.32@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/34736031c3b8.html, оценка из 5, голосов 10
|