電子書籍の厳選無料作品が豊富!

初めて質問します。
今、PerlのDBIを使ってMySQLのトランザクション処理にチャレンジしています。

ところが、rollback処理がうまくできません。

具体的には、 table2 がある状態で下のプログラムを動かすと、
エラーの表示が出るのに、 table1 は作成されました。

何らかのエラーがあれば、どちらも作成されないようにしたいです。

=======================================================
my %sql;
$sql{db_name} = "database";
$sql{host} = "localhost";
$sql{user_name} = "user_name";
$sql{password} = "password";
use DBI;
my $dbh = DBI->connect('DBI:mysql:'.$sql{db_name}.':'.$sql{host}, $sql{user_name}, $sql{password}
,{RaiseError => 1, PrintError => 0, AutoCommit => 0 }) || &Err();
my $sth;
my $re;
eval {
my $sql_string1 = "create table table1(`id` int);";
my $sql_string2 = "create table table2(`id` int);";
$sth = $dbh->prepare($sql_string1);
$re = $sth->execute;
$sth = $dbh->prepare($sql_string2);
$re = $sth->execute;
};
if ($@) {
$tag="Err:".$@."\n";
$sth = $dbh->rollback;
}else{
$sth = $dbh->commit;
}
$sth->finish;
$dbh->disconnect;
=======================================================

検索して、いろいろいじっても解決しませんでした。
どうかよろしくお願いします。

A 回答 (1件)

CreateはDDLです。


DDLはロールバックできない。

Oracleもロールバックできない。
SQLServerはロールバックできる。

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/cannot-ro …
    • good
    • 0
この回答へのお礼

そうなんですか!
ありがとうございます。

お礼日時:2013/03/02 23:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!