2016-12-15 7 views
1

は、例えば、あるユーザは、次のようにクエリを実行します:複数同時に要求されたクエリの実行順序は

UPDATE table SET column = 100; 

第2のユーザ:

UPDATE table SET column = 200; 

と言うことができます、これらの2つのクエリが要求されているまったく同じ時間、同じ秒、同じナノ秒(またはこのDBのための最小時間測定単位)、次にどのクエリが最初に実行され、どの秒が実行されますか?

この場合、データベースはクエリシーケンスをランダムに選択するかどうかを確認します。

P.S.私はいくつかの具体的なデータベースにはタグを付けていませんが、私はすべての主要なRDBMSのこのメカニズムが似ていると思います。またはそうでないかもしれません?

+0

あなたの動機は何ですか? –

+0

この場合、選択メカニズムがどのように機能するかを理解してください – RIKI

+1

統計情報では非常に特別な意味を持つため、選択肢を「ランダム」と呼ぶことはありません。私はそれを「不確定」または「任意」と呼ぶかもしれません。 –

答えて

2

RDBMSは、ACIDを省略して(と呼ばれる)一連のプロパティを実装しています。 Wikipedia explains the concept

基本的に、ACID準拠のデータベースは、あるレベル(テーブル、ページ、行のロックが一般的です)でデータをロックします。原理的には、同じオブジェクトに対して同時に1つの書き込みロックしか取得できません。したがって、データベースはトランザクションのいずれかの行を任意にロックします。

他のトランザクションはどうなりますか?それにもよるが、次の2つのうちの1つが発生するはずである:

  • トランザクションは、ロックが利用可能になるまで待機する。だから "最後に"、それは価値を割り当てる(ロックを失い、戦争に勝つ;)。
  • 適切な行が使用できないため、トランザクションは「タイムアウト」します。

テーブルのすべての行が影響を受けるため、ケースはかなり複雑です。ただし、最終的には、すべての行がACID準拠のデータベースで同じ値を持つ必要があります。

メジャーデータベースは(通常)ACIDに準拠していることに注意してください。しかし、ロックやトランザクションなどのメカニズムを持っていても、詳細はデータベースによって異なる場合があります。

1

通常、DML操作は操作がアトミックと一貫性のあるを作られているの助けを借りて、DMLをロックを取得することによって行われます。したがって、あなたのケースでは、問合せのいずれかにDMLロックが与えられて実行され、次に2番目の問合せでも同様の方法で処理が進められます。どちらが1番目と2番目に行くのかは分かりません。

+0

DMLロックは、データベース固有のもの、特にOracleのように聞こえます。このメカニズムは他のデータベースにも存在しますが、用語は異なる場合があります。 –

関連する問題