2011-11-07 6 views
20

私はinnoDBテーブルでトランザクションサポートをテストしていましたが、ちょっとしたことでMyIsamテーブルで同じトランザクションを実行しようとしましたが、驚いたことにそれが機能しました。私は、myIsamテーブルのクエリが1つのアトミック操作ではなく次々に実行され、START TRANSACTIONおよびCOMMITおよびROLLBACK操作からエラーが発生しないと仮定しています。私はMyIsamエンジンがこの操作を無視しているのか、何らかのアクションを実行しているのか、興味がありますか?MyIsamエンジントランザクションサポート

+0

からこの記事を読むことは、あなたがDMLステートメントをロールバックすることができましたことを意味したり、構文エラーを取得していないことを「働きましたか」? –

+0

私は単純なselect文とinsert文を実行したが、エラーは発生しなかった。 – Headshota

+2

さて、@ Darhazerの答えを見てください。エラーは発生しませんが、実際にトランザクションは発生しません。 'INSERT'は' ROLLBACK'を発行したときに元に戻されません。 –

答えて

26

MyISAMは(トランザクションエンジンではないため)効果的に自動コミットモードで動作し、コミット/ロールバックを無視します。

実際にストレージエンジンは、SQLパーサーから分離されたMySQLアーキテクチャーの別のレイヤーであり、SQLレイヤーは低レベルのAPIを使用してストレージエンジンと通信するため、一般的なSQLとエンジンがあり、特集のサブセットアーキテクチャの非常に高いレベルの概要を見ることができますhere

2

MyIsamのタブはこのために構築されていません。 5+バージョンでさえも。それはデータを格納することだけを意味していました。これにより、トランザクションやデータの復旧が保証されません。これにはInnoDBを使用し、必要に応じてレプリケーションの目的でMyIsamを使用する必要があります(クロステーブルチェックがないため、MyIsamテーブルでデータを取得する方が速い)。

あなたはMySQLの http://forums.mysql.com/read.php?21,68686,69229#msg-69229

関連する問題