職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

ROWIDの参照とINTEGER PRIMARY KEYとの関係

2020年06月04日 | sqlite
ROWID の利用方法


【開発環境】
OS::Win10(64ビット)
コマンドプロンプト

【ROWIDの値を取得】
ROWID とはテーブルに用意されている非表示のカラムです。テーブルにデータを追加するごとに自動的に ROWID にも値が設定されます。

・実例を見てみる。
C:\Users\shyok>cd D:\pg\sqlite3
C:\Users\shyok>d:

D:\pg\sqlite3>sqlite3 D:\pg\sqlite3\myfriend.sqlite3
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite>
sqlite> .table
numtest1 personal user
sqlite> select * from user;
1|Andou
2|Honda
3|Yamashita
8|Kanemoto
9|Tokuda
sqlite>

ROWIDを表示してみる
sqlite> .header on←ヘッダーとしてカラム名を表示
sqlite> .mode column←カラム毎に左揃えで出力
sqlite> select *,rowid from user;
id name id
---------- ---------- ----------
1 Andou 1
2 Honda 2
3 Yamashita 3
8 Kanemoto 8
9 Tokuda 9
sqlite>
なお ROWID は他のデータベースとの互換性を保つために別名として OID と _ROWID_ が用意されているが、INTEGER PRIMARY KEY制約がされていると、次のように成る
sqlite> select *, rowid, oid, _rowid_ from user;
id name id id id
---------- ---------- ---------- ---------- ----------
1 Andou 1 1 1
2 Honda 2 2 2
3 Yamashita 3 3 3
8 Kanemoto 8 8 8
9 Tokuda 9 9 9
sqlite>

【ROWIDに値を設定】
ROWID の値はデータの追加時に自動的に設定されるので通常は気にしなくてもいいのですが、任意の値を指定する事も出来る。

ただし、INTEGER PRIMARY KEY制約を設定されていると無理
sqlite> insert into user(id, name, ROWID) values(12, 'Hanayama',10);
sqlite> select *,rowid from user;
id name id
---------- ---------- ----------
1 Andou 1
2 Honda 2
3 Yamashita 3
8 Kanemoto 8
9 Tokuda 9
10 Hanayama 10
sqlite>

■INTEGER PRIMARY KEY制約なしのテーブルを作ってみる
sqlite> create table Tuser (id integer, name text);
sqlite> .tables
Tuser numtest1 personal user(INTEGER PRIMARY KEY制約あり)
sqlite> insert into Tuser values(3, 'Yamada');
sqlite> insert into Tuser values(8, 'Suzuki');
sqlite> select * ,rowid from Tuser;
id name rowid
---------- ---------- ----------
3 Yamada 1
8 Suzuki 2
sqlite>
なお ROWID は他のデータベースとの互換性を保つために別名として OID と _ROWID_ が用意されている。
sqlite> select *, rowid, oid, _rowid_ from Tuser;
id name rowid rowid rowid
---------- ---------- ---------- ---------- ----------
3 Yamada 1 1 1
8 Suzuki 2 2 2
sqlite>
ROWID の値を任意にしてみる。
sqlite> insert into Tuser(id, name, ROWID) values(10, 'Hanayama', 8);
sqlite> select * ,rowid from Tuser;
id name rowid
---------- ---------- ----------
3 Yamada 1
8 Suzuki 2
10 Hanayama 8
sqlite>
以上

コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 息子介護物語-エピソード20(... | トップ | SQLiteのAUTOINCREMENT制約に... »
最新の画像もっと見る

コメントを投稿

sqlite」カテゴリの最新記事