PKとして次のフィールドを持つDB上のテーブルがあります:DOC_ID
、、、。推測できるように、これは一連のExcelスプレッドシートと呼ばれます。SECTION_ID
SET_ID
CELL_ID
それらのフィールドに加えて、私はCELL_ROW
フィールドとCELL_COL
フィールドを持っています。SET_ID
(unique )を使用すると、代替キーが形成されます。
したがって、少なくとも理論的には、2つのセルの座標を交換する場合は、その制約を解除するか、3番目の一時的な空き位置(たとえば、 A100000)を使用する必要があります。
次のセルがあるとします。
DOC_ID | SECTION_ID | SET_ID | CELL_ID | CELL_ROW | CELL_COL
--------|------------|--------|---------|----------|----------
5 | 456 | 8778 | 15045 | 5 | 4
5 | 456 | 8778 | 15048 | 5 | 5
UPDATE
そして、メインテーブルに対して実行する次の一時テーブルがあるとします。
DOC_ID | SECTION_ID | SET_ID | CELL_ID | CELL_ROW | CELL_COL
--------|------------|--------|---------|----------|----------
5 | 456 | 8778 | 15045 | 5 | 5
5 | 456 | 8778 | 15048 | 5 | 4
理論的には、それUPDATE
は例外を引き起こすはずです...
しかし、試してみただけで、うまくいきます!
理由を説明してもらえますか?Oracleはそれを不可分操作として実行するので、制約は(レコードごとのレコードではなく)操作全体の後でのみチェックされますか?
このような状況でMSSQLServer 2008 r2とPostgresはどのように動作しますか?