2009-04-23 8 views
2

私は、データベーストランザクションを使用して、トランザクション内のすべてのステートメントが実行されるかどうかを確認することができます。データベーストランザクションに関する初心者の質問

しかし、私は複数のテーブルに影響を与えるsprocを持っていて、そのsprocでトランザクションを使用すると、sprocが異なるクライアントから同時に呼び出された場合、トランザクションは並行して動作しますまたはそれらは待ち行列に入れられますか?言い換えれば、トランザクションを使用すると、他のすべてのクライアントを「ロック」し、トランザクションが終了するまで待機することが保証されますか?

SQL ServerとMySQLのデータベーストランザクションにも違いがありますか?私は彼らが働く方法を意味する。

答えて

2

DBMSにもよりますが、ストアドプロシージャは通常はロックされません。データベーステーブルの行はロックされており、2つのストアドプロシージャが互いに干渉しないようにしています。

これは、より細かいロックを備えているため、競合を引き起こす可能性は低いです。

SQLServerとMySQLの違いは、私は下位レベルでは分かりません。まったく別のことをする可能性があります。しかし、それらはSQL標準の点で同じです(そうでなければ、かなり役に立たないでしょう)。

+1

InnoDBを追加してテーブルをロックすると、MyISAMは行をロックします。 MySQLで。 –

+2

@ÓlafurWaage、実際にはそれは逆です –

+0

トランザクション中にテーブル全体をロックするMySQL(エンジンの1つを使用していますか?それはそれを行うには恐ろしい方法に見えます。 – paxdiablo

1

TStamperはすでにMySQLの対SQL Serverへのリンクを提供していますが、一般的なトランザクションの振る舞いに興味を持ってこれらのリンクをチェックアウトする場合:

http://www.oracle.com/technology/oramag/oracle/05-nov/o65asktom.html http://en.wikipedia.org/wiki/Isolation_(database_systems)

分離レベルは、DBMSによって異なります。一部のDBMSシステムでは、分離レベルを構成できます(より高い分離レベルは通常、競合による低速/スループットを意味します)。