1

2 人のユーザーがINSERT INTO同じターゲット テーブルに対してステートメントを同時に実行する場合、これらは並列で実行されますか、それとも順番に実行されますか?

この動作は、ターゲット テーブルに主キーがあるかどうかによって変わりますか?

これは、すべてのリレーショナル データベースに対して定義されたルールですか? それとも、ベンダーごとに異なる方法で実装されていますか?

4

1 に答える 1

2

一般に、主キーが定義されている場合でも、それらは並行して実行されます (すべきです)。

動作は DBMS に大きく依存します。MyISAM を使用する MySQL は、たとえば、DML がテーブルに対して実行されている場合、テーブルへのそれ以降のアクセスをブロックします。デフォルト インストールの SQL Server と古いバージョンの DB2 についても同じことが言えます。

一般に、DBMS がMVCC (Oracle、PostgreSQL、Firebird、MySQL/InnoDB など) を使用している場合は、挿入が並行して実行されることが期待できます。

同時挿入をブロックできることの1 つは、2 つのトランザクションが同じ主キー値を挿入する場合です。その場合、2 番目のトランザクションは、最初のトランザクションがコミットする (2 番目のトランザクションで pk 違反エラーが発生する) か、ロールバックする (2 番目のトランザクションが成功する) まで待機する必要があります。

于 2012-07-09T07:57:38.277 に答える