MySql トランザクションが効かない? [mysql]

 mysqlを利用したアプリケーションのテストをしていて、更新処理中にエラーが発生しても、データがロールバックされていないことに気付きました。アプリケーション側を見直してみましたが、トランザクション処理やエラーフックにも問題がありませんでした。

  mysqlに関して初心者なので何か設定に問題があるのかもと思ってネットで調べた所、mysql側の設定に問題がありました。

MyISAM

  mysqlにはストレージエンジンというものがあるらしく、その設定がMyISAMになっていました。平たく言うとトランザクション処理ができないようです。デフォルトのストレージエンジンがMyISAMになっていたらしく、知らずにテーブルを作っていました。通常InnoDBを利用するようです。

■■変更■■
my.confを開き、[mysqld]の下に一文を追加します。
default-storage-engine=innodb

そして、mysqlを再起動!!

MySql Workbenchで確認してみるとデフォルトのストレージエンジンがInnoDBになっていることが確認できました。

さらに既存のテーブルのストレージエンジンをWorkbench経由でMyISAMからInnoDBに変更しました。
最後に確認。
select table_name, engine from tables where table_schema = 'スキーマ名'


最終的に開発中のアプリケーションで確認した所、無事トランザクション処理が動作しました。
以上です。

コメント

人気の投稿