ここでは、行識別子の概要と注意事項について説明します。
行識別子(SQL ROWID)とは
行識別子は、データベース中の任意の表の行を一意に識別するためのものです。Symfoware Serverにおける行識別子は、“ROW_ID”で表します。行識別子は、問合せ指定の選択リストに指定して値を取り出すことができます。取り出した行識別子は、以下の探索条件に指定して任意の行を操作するために使用します。
UPDATE文:探索の探索条件
DELETE文:探索の探索条件
問合せ指定のWHERE句の探索条件
行識別子を使用することにより、データベース中の単一行を高速に操作することができます。また、あらかじめ検索した集合の任意の行を一意に識別して操作することができます。
行識別子を使用して行の更新を行います。
行識別子使用時の注意
行識別子を使用する場合の注意事項を、以下に示します。
問合せ指定で取り出した行識別子を、SQLデータ操作文のWHERE句の探索条件に指定する場合、SQLデータ操作文は、行識別子を取り出した問合せ指定と同じ表を操作する必要があります。取り出した行識別子を、異なる表を操作するデータ操作の探索条件に指定すると、検索データは見つかりません。
取り出した行識別子は、そのトランザクション内で再検索または更新に使用することができます。ただし、トランザクションの独立性水準により同一トランザクション内においても、同じデータを検索、もしくは、異なる行を更新してしまうことがあります。
独立性水準 | 同一行の操作 |
SERIALIZABLE | 同一行の操作を保証します。 |
REPEATABLE READ | 同一行の操作を保証します。 |
READ COMMITTED | 以下のいずれかの条件で取得した行識別子は、再検索で異なる行を識別することがあります。 ・トランザクションアクセスモードがREAD ONLY ・カーソルの更新可能性句がREAD ONLY |
READ UNCOMMITTED | 再検索で異なる行を識別することがあります。 |
取り出した行識別子を、他のトランザクションで再検索または更新に利用すると、同じデータを検索、または、異なる行を更新することがあります。このような場合は、行識別子を取り出したときに行のデータも同時に取り出しておき、行識別子を利用して更新する前に、行識別子で再検索して行のデータが他のトランザクションにより変更されていないかどうかを調べる必要があります。
事象 | 原因 |
検索データなし | 該当行が、他のトランザクションにより削除または更新されています。 |
前回の検索結果と値が異なる |
|
参照
行識別子を指定可能な箇所についての詳細は、“SQLリファレンス”を参照してください。
注意
プロシジャルーチン内の処理には、行識別子は使用できません。