MySQL(マイエスキューエル)

MySQLのトランザクション処理

今日は久しぶりにはまりました。

 

現在、

バッチ処理でデータベースからデータを一旦全て削除して、

新規に取り込み直す処理を作成しています。
※データベースはMySQLです。

 

TRUNCATE

で全削除!!

 

その後、

新規にデータを

INSERT!!

 

というような処理を書いたのですが、

トランザクションのテストとして、

わざとエラーを出してロールバックを行ってみたところ、

データは元に戻らず。。。。

 

コードはこんな感じです↓

・
・
try{

    //データベースをオープン
    $pdo = openPod();

    //トランザクション開始
    $ret = $pdo->beginTransaction();
・
・
    try{
        //データの削除
        $query01 = "TRUNCATE テーブル名";
        $stm01 = $pdo->prepare($query01);
        //実行する
        $stm01->execute();

        //データの挿入
        $query02 = "INSERT INTO テーブル名 ....";
        $stm02 = $pdo->prepare($query02);
        //実行する
        $stm02->execute();

        //コミットする
        $ret = $pdo->commit();

    }catch(Exception $e){
        //ロールバックする
        $ret = $pdo->rollBack();
        echo "失敗しました。" . $e->getMessage();
    }

}catch (Exception $e) {
    echo "失敗しました。" . $e->getMessage();
}
・
・
exit;

※実際には他にもいろいろとエラー処理を入れているので、
 コードはもっとごちゃごちゃしています。

 

それで、

今更ながらに分かった事なんですが、

MySQLのTRUNCATE処理は、

トランザクション外で行われる為に、

ロールバックが出来ないとのこと。。。

 

ここに辿りつくまでに少し無駄に時間を取ってしまいました。

 

仕方ないので、

DELETE

でデータを削除するように変更すると、

今度はこちらの期待通りの動作をしてくれました。

0
この記事を書いている人
株式会社ディープ

名前ダッチ

メールアドレスadachi@deep-deep.jp

Twitterはこちら >>

  • コメント: 0

関連記事

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

最近の記事

  1. WP:WordPress(ワードプレス)
  2. WP:WordPress(ワードプレス)
  3. WP:WordPress(ワードプレス)
  4. 文系と理系のメリットとデメリット
  5. 東京駅
  6. 残業
  7. プログラマーになるのに年齢は関係ある?
  8. 年収(収入)
  9. income(収入)
  10. プログラマーになろう

Twitter

ダッチ@職業ブロガー兼プログラマー
@gatsu0000

アーカイブ

PAGE TOP