データベースに格納される各行データにはアドレスがあり、OceanBaseデータベースはRowidデータ型を使用してデータベース内の各行のアドレスを格納します。
Rowidには、主キーのないテーブルのROWIDと主キーのあるテーブルのROWIDが含まれます。UROWID(Universal Rowid)は、上記の2種類のROWIDを格納することをサポートしています。
OceanBaseデータベースでは、各テーブルにROWIDという名前の疑似列があります。
疑似列は通常のテーブル列のように動作しますが、実際にはテーブルには格納されていません。疑似列に対してSELECT操作を実行できますが、その値に対してINSERT、UPDATE、DELETE操作を実行することはできません。疑似列はパラメータなしのSQL関数にも似ています。パラメータなしの関数は通常、結果セットの各行に同じ値を返しますが、疑似列は通常、各行に異なる値を返します。
主キーのあるテーブルのROWIDは、各行データの主キー列とパーティションキーから仮想的に生成された列を組み合わせ、Base64エンコード変換して作成されます。
ROWID疑似列の値は、各行データのKey(主キーのあるテーブルではPrimary Key、主キーのないテーブルではシステムが自動生成するシーケンス)をBase64エンコード変換したものです。ROWIDという予約語を列名として使用するSQLを使用することで、各行のRowidにアクセスできます。
主キーのないテーブルのROWIDは、tablet idと隠れた主キー列を組み合わせ、Base64エンコード変換して作成されます。ここで、tablet idと隠れた主キー列はどちらも64ビット整数型で表現できるため、主キーのないテーブルのROWIDの長さは固定されています。
ROWIDという予約語を列名として使用するSQLを使用することで、各行のrowidにアクセスできます。