SQLite | テーブル | ROWIDとINTEGER PRIMARY KEY
SQLiteは各行に隠し列ROWIDを自動で割り当てる。
create table user (id integer, name text);
insert into user values (3, 'devkuma');
insert into user values (8, 'araikuma');
select *, rowid from user;
最初の2行のROWIDは1と2になる。新しい行には通常、現在の最大値に1を加えた値が割り当てられる。
insert into user values (5, 'kimkc');
select *, rowid from user where rowid = 2;
select *, rowid, oid, _rowid_ from user;
OIDと_ROWID_はROWIDの別名である。
ROWIDの明示指定
insert into user (id, name, ROWID) values (10, 'happykuma', 8);
insert into user (id, name, ROWID) values (9, 'mykuma', 3);
-- UNIQUE constraint failed: user.rowid
ROWIDは一意でなければならない。
INTEGER PRIMARY KEYとの関係
INTEGER PRIMARY KEY列はROWIDの別名であり、一方を設定すると他方も同じ値になる。
create table user (id integer primary key, name text);
insert into user values (1, 'devkuma');
insert into user values (6, 'kimkc');
insert into user values (3, 'ariakuma');
select *, rowid from user;
結果のROWIDが列名idで表示されるのは、idがその別名だからである。