重複行の検証 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

テーブルが(UNIQUE制約なしで)MULTISETとして作成されて重複行が可能になっている場合を除いて、システムは常に更新処理の際に重複行をチェックします。更新が実行される順序は、トランザクションの結果に影響することに注意してください。

次の例について考えてみます。

     CREATE SET TABLE t1 (
       a INTEGER,
       b INTEGER)
     PRIMARY INDEX (a);

     INSERT INTO t1 VALUES (1,1);

     INSERT INTO t1 VALUES (1,2);

     UPDATE t1
     SET b = b + 1
     WHERE a = 1; /* fails */
     UPDATE t1
     SET b = b - 1
     WHERE a = 1; /* succeeds */

最初のUPDATEリクエストは、重複行を作成するので失敗します。

UPDATEリクエストの順序が逆の場合には、UPDATEによって重複行が作成されないため、両方のUPDATEリクエストともに成功します。

     CREATE SET TABLE t1 (
       a INTEGER,
       b INTEGER)
     PRIMARY INDEX (a);

     INSERT INTO t1 VALUES (1,1);

     INSERT INTO t1 VALUES (1,2);

     UPDATE t1
     SET b = b - 1
     WHERE a = 1; /* succeeds */
     UPDATE t1
     SET b = b + 1
     WHERE a = 1; /* succeeds */

このモードは単純な更新と結合更新の両方の特徴です。それに対して、プライマリ インデックスまたはセカンダリ インデックスの値に影響を与える更新は、別個の削除および挿入操作として実装されます。