トランザクションについて #10B!

こんにちわ!nekokakです!

十日目はDBIx::Skinnyでのトランザクションの使い方です。

トランザクションについての説明は省きます。

http://e-words.jp/w/E38388E383A9E383B3E382B6E382AFE382B7E383A7E383B3.html

このあたりを読めばいいんじゃないでしょうか。

早速試しましょう。

ちなみに実験するときはトランザクションに対応しているRDBMSを使ってください。

MySQLの場合だとMyISAMでためしてもMyISAMがトランザクションに対応していないのでいみがありません。

InnoDBで試しましょう。

# トランザクションの開始
my $txn = $db->txn_scope;

# dataのupdate
$row->update({name => 'yappo'});

# トランザクション内で実行したいいろいろな処理

# トランザクションを終了してデータをcommitする!
$txn->commit;

このように書くと、txn_scopeメソッドを呼び出したときに帰ってくるオブジェクトを保持しているあいだ

トランザクションが有効となります。

なので

# トランザクションの開始
my $txn = $db->txn_scope;

# dataのupdate
$row->update({name => 'yappo'});

die 'oooops';

# トランザクションを終了してデータをcommitする!
$txn->commit;

updateメソッドの後の処理がdieなどで異常終了した場合、

updateメソッドでの更新がrollbackされます。

また、$txn->commitをよびださずに処理を終了させた場合、

正常に処理が行われなかったとみなし、強制rollbackされます。

トランザクションをうまく使うとデータの一貫性を保証した処理を書くことができますので

びしばしつかってみてください。

明日は今まで発行してきたSQLのプロファイリングについて考えたいと思います。

have a nice skinny days!:)