【SQLite入門】PRIMARY KEY(主キー)に INTEGER 型を使う際に注意すること

SQLiteでは、主キーカラムが INTEGER型の場合、ROWID のエイリアスになるという特徴があります。

ROWIDのエイリアスになると次の動作をします。

1. 主キー列に登録した値 = ROWID値

2. 主キー列にもROWIDの制約がかかる

以下では、それぞれの動作を検証します。

検証1. 主キー列に登録した値 = ROWID値

検証では簡単に次のテーブルを使用します。ID列が INTEGER型の主キー列です。

このテーブルに一行登録します。

追加したデータを取得すると、次のように ROWID と ID が同じ値になっています。

また、ID を 200 で更新すると、ROWID も同じ値になります。

逆に ROWID の値を300 で更新した場合も、ID の値も同じ値に更新されていることが分かります。

このことから、INTEGER型の主キー列 が ROWID のエイリアスになっていることが分かります。

検証2. 主キー列にもROWIDの制約がかかる

ROWIDの制約とは、登録できる最大整数 が 9223372036854775807 になるという点です。

あまりないケースかも知れませんが、主キー列にも同じ制約がかかることを知っていて損はないと思います。

検証1 と同じテーブルに ROWID が登録できる最大整数と同じ値を ID に登録します。

無事に登録することができました。

次に、最大整数 +1 の 9223372036854775808 を ID に登録します。

残念ながら、ROWID の制約でエラーになってしまいました。

ちなみに、INTEGER列 でも 主キー制約がない場合、ROWID の制約に縛られないため、次のように最大整数を超える値も登録することができます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする