ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

H.1.3 更新系アクセスモデル

更新系のアクセスモデルは、更新する標的レコードを位置づけるまでの部分と、標的レコードを更新する部分から構成されます。

標的レコードを位置づける部分

標的レコードを位置づける部分は、制約系アクセスモデルのいずれかを選択します。ただし、インデックス検索のアクセスモデル(表データを取得しないアクセスモデル)は、更新する標的レコードを位置づけるまでの制約アクセスモデルとはなりません。なぜなら、更新処理は必ず表のデータを更新するからです。また、並列スキャンのアクセスモデルも、UPDATE文:探索またはDELETE文:探索のアクセスプランとして選択されません。

[UPDATE文:探索またはDELETE文:探索で更新標的レコードを位置づけるまでの部分]

制約アクセスモデル名

ROW_ID検索

クラスタキー検索

インデックス検索

TIDユニオンマージ

表の全件検索

UPDATE文:位置づけまたはDELETE文:位置づけでは、カーソルにより位置づけられた現在行を更新または削除します。標的レコードの位置づけにはTABLE KEY SCANのアクセス方式を使用します。

標的レコードを更新する部分

標的レコードの更新は、データベースの表のレコードの更新(更新、削除または挿入)と、インデックスのレコードの更新(更新、削除または挿入)を行います。インデックスは次の場合に更新されます。

参考

表のレコードの位置は、次の操作を行った場合に移動することがあります。

  • 表の分割条件に指定した列を更新する場合

  • 表のクラスタキーを更新する場合

  • VARCHAR/NCHAR VARYING/BLOBの列を前より長いデータに更新する場合

1) UPDATE:探索

WHERE探索条件に指定した条件から、制約アクセスモデルのいずれかを選択して、データベースを更新するアクセスモデルです。

(1) 制約アクセスモデルにより更新標的レコードを位置づける。

(上記の例では、インデックス検索と表データ取得のアクセスモデルを採用している)

(2) 表レコードを取得する。

(3) 表レコードのC3部分を更新する。

(4) 更新前のデータからインデックスの当該レコードを削除して、新しいレコードを挿入する。


[アクセスプランの出力例]

===============================================================================
Main query 
=sno===sectname=====input1==============input2==============output/update======
   1 : SCAN        [TBL1_IX1_DSO      ][                  ][SORT0001          ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name       SCM1.TBL1
        scan type        INDEX KEY SCAN(2)
        dso name         TBL1_IX1_DSO        [PAGE/SH]
        condition evaluation  No
        scan record number    100
  [  2] INSERT ELEMENT
        table name       SORT0001
        insert record length  12
-------------------------------------------------------------------------------
   2 : SCAN        [SORT0001          ][TBL1_BASE_DSO     ][                  ]
       UPDATE      [                  ][                  ][TBL1_BASE_DSO     ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name        SORT0001
        scan type         TABLE ALL SCAN
        condition evaluation    No
  [  2] SCAN ELEMENT
        table name       SCM1.TBL1
        scan type        TABLE KEY SCAN
        dso name         TBL1_BASE_DSO       [PAGE/SH]
        condition evaluation  No
        scan record number    1
  [  3] UPDATE ELEMENT
        table name       SCM1.TBL1
        dso name         TBL1_BASE_DSO       [PAGE/EX]
                         TBL1_IX2_DSO        [PAGE/EX]

2) UPDATE:位置づけ

カーソルにより位置づけられているレコードを更新するアクセスモデルです。

(1) 現在カーソル位置のレコードをTABLE KEY SCANで位置づける。

(2) 表レコードを取得する。

(3) 表レコードのC3部分を更新する。

(4) 更新前のデータからインデックスの当該レコードを削除して、新しいレコードを挿入する。


[アクセスプランの出力例]

===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
   1 : SCAN        [TBL1_BASE_DSO     ][                  ][                  ]
       UPDATE      [                  ][                  ][TBL1_BASE_DSO     ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name       SCM1.TBL1
        scan type        TABLE KEY SCAN
        dso name         TBL1_BASE_DSO       [PAGE/EX]
        condition evaluation  No
        scan record number    1
  [  2] UPDATE ELEMENT
        table name       SCM1.TBL1
        dso name         TBL1_BASE_DSO       [PAGE/EX]
                         TBL1_IX2_DSO        [PAGE/EX]

3) DELETE:探索

WHERE探索条件に指定した条件から、制約アクセスモデルのいずれかを選択して、データベースのレコードを削除するアクセスモデルです。

(1) 制約アクセスモデルにより更新標的レコードを位置づける。

(上記の例では、表の全件検索を採用している)

(2) 表レコードを取得する。

(3) 表レコードを削除する。

(4) 更新前のデータからインデックスの当該レコードを削除する。


[アクセスプランの出力例]

===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
   1 : SCAN        [TBL1_BASE_DSO     ][                  ][                  ]
       UPDATE      [                  ][                  ][TBL1_BASE_DSO     ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name       SCM1.TBL1
        scan type        TABLE ALL SCAN
        dso name         TBL1_BASE_DSO       [DSI/SH]
        condition evaluation  Yes
        scan record number    100
  [  2] DELETE ELEMENT
        table name       SCM1.TBL1
        dso name         TBL1_BASE_DSO       [DSI/EX]
                         TBL1_IX1_DSO        [DSI/EX]
                         TBL1_IX2_DSO        [DSI/EX]

4) DELETE:位置づけ

カーソルにより位置づけられているレコードを削除するアクセスモデルです。

(1) 現在カーソル位置のレコードをTABLE KEY SCANで位置づける。

(2) 表レコードを取得する。

(3) 表レコードを削除する。

(4) 更新前のデータからインデックスの当該レコードを削除する。


[アクセスプランの出力例]

===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
   1 : SCAN        [TBL1_BASE_DSO     ][                  ][                  ]
       UPDATE      [                  ][                  ][TBL1_BASE_DSO     ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name       SCM1.TBL1
        scan type        TABLE KEY SCAN
        dso name         TBL1_BASE_DSO       [PAGE/EX]
        condition evaluation  No
        scan record number    1
  [  2] DELETE ELEMENT
        table name       SCM1.TBL1
        dso name         TBL1_BASE_DSO       [PAGE/EX]
                         TBL1_IX1_DSO        [PAGE/EX]
                         TBL1_IX2_DSO        [PAGE/EX]

5) 挿入値リストを指定したINSERT

データベースの表に挿入値リストで指定したレコードを挿入するアクセスモデルです。

(1) 表のレコードを作成し、表に挿入する。

(2) インデックスのレコードを作成し、インデックスに挿入する。


[アクセスプランの出力例]

===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
   1 : UPDATE      [                  ][                  ][TBL1_BASE_DSO     ]
-------------------------------------------------------------------------------
  [  1] INSERT ELEMENT
        table name       SCM1.TBL1
        dso name         TBL1_BASE_DSO       [PAGE/EX]
                         TBL1_IX1_DSO        [PAGE/EX]
                         TBL1_IX2_DSO        [PAGE/EX]

6) 問合せ指定を指定したINSERT

データベースの表に問合せ指定の結果を挿入するアクセスモデルです。

問合せ指定の結果は、制約系アクセスモデルやジョイン系アクセスモデルおよびその組合わせにより求められた結果です。

(1) 問合せ指定の結果を求める。

(2) 表のレコードを作成し、表に挿入する。

(3) インデックスのレコードを作成し、インデックスに挿入する。


[アクセスプランの出力例]

===============================================================================
Main query
=sno===sectname=====input1==============input2==============output/update======
   1 : SCAN        [TBL2_BASE_DSO     ][                  ][                  ]
       UPDATE      [                  ][                  ][TBL1_BASE_DSO     ]
-------------------------------------------------------------------------------
  [  1] SCAN ELEMENT
        table name       SCM1.TBL2
        scan type        TABLE ALL SCAN
        dso name         TBL2_BASE_DSO       [DSI/SH]
        condition evaluation  Yes
        scan record number    100
  [  2] INSERT ELEMENT
        table name       SCM1.TBL1
        dso name         TBL1_BASE_DSO       [DSI/EX]
                         TBL1_IX1_DSO        [DSI/EX]
                         TBL1_IX2_DSO        [DSI/EX]