2011年4月25日星期一

Re: [PerlChina] DBD::mysql 的 TRANSACTION 問題

myisam ?

在 2011年4月25日 下午9:33,Anthony WU <anthonywuy2k@gmail.com>写道:
請問有沒有前輩使用過 DBD::mysql 的 TRANSACTION 模式?
我在編寫時發現 DBD::mysql 中的 TRANSACTION 產生不了應有的 rollback 功能。
而且測試過 AutoCommit、begin_work 的調用中沒有發生 $@ 擲出 又或 $dbh->errstr 訊息
在不修改原有代碼而只修改 DSN 的 driver name 成 Pg,在同樣的 table 設計中 PostgreSQL Server 下則沒有問題
以下是我所用的最簡單的測試代碼:

#!/usr/bin/perl
#perl v5.12.3
use DBI;
use DBI::DBD;

#my $dbh=DBI->connect ('dbi:Pg:database=TEST;host=localhost', 'root' , '', {AutoCommit => 1});
#printf ("DBD::Pg::VERSION: %s\n",  $DBD::Pg::VERSION);                   #DBD::Pg::VERSION: 2.17.1
#mysql server 5.1.55-1

my $dbh=DBI->connect ('dbi:mysql:database=TEST;host=localhost', 'root' , '', {AutoCommit => 1});
printf ("DBD::mysql::VERSION: %s\n",  $DBD::mysql::VERSION);           #DBD::mysql::VERSION: 4.017
#postgresql server 8.4.7-1
printf ("DBI::DBD::VERSION: %s\n",  $DBI::DBD::VERSION);                  #DBI::DBD::VERSION: 12.014120
printf ("DBI::VERSION: %s\n",  $DBI::VERSION);                                        #DBI::VERSION: 1.613

$dbh->begin_work ();
$sth = $dbh->prepare ("INSERT INTO messages (title, messages) VALUES(?, ?);");
$sth->execute ("TITLE", "MESSAGES");
$dbh->rollback ();
#$dbh->commit ();
$dbh->disconnect ();
exit;

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。


--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: