auの日記

プログラミング初心者の日記。(auはハンドルネームです)

SQLでのROWID値

auです。
今回は、ROWID値について調べてみました。

CREATE TABLE user(id integer, name text);

userテーブルに、idとnameのカラム値を指定したものを作りました。

INSERT INTO user VALUES(1, "Sato");
INSERT INTO user VALUES(4, "Suzuki");
INSERT INTO user VALUES(8, "Takahashi");

そのテーブルに、3つのデータを追加しました。

SELECT * FROM user;
1|Sato
4|Suzuki
8|Takahashi

普通にテーブル内を見ようとすると、こうでます。
ここに、ROWIDを追加してみてみます。やり方は以下の通りです。

SELECT *. ROWID FROM テーブル名;

実際のテーブルでやってみます。

 SELECT *, ROWID FROM user;
1|Sato|1
4|Suzuki|2
8|Takahashi|3

nameの右に、1、2、3と順番に番号が振られているのがわかります。

SELECT *, ROWID FROM user WHERE ROWID = 2;
4|Suzuki|2

このように書くと、指定したROWIDの番号のデータだけ抜き出すことができます。
ROWID値を指定することもできます。

INSERT INTO user(id, name, ROWID) VALUES(11, "Kato", 9);
SELECT *, ROWID FROM user;
1|Sato|1
4|Suzuki|2
8|Takahashi|3
11|Kato|9

割り込んで挿入することができました。

INSERT INTO user(id, name, ROWID) VALUES(3, "Tanaka", 2);
Error: UNIQUE constraint failed: user.rowid

重複した数値を入れることはできませんでした。プライマリーキーと同じようなエラー文がでました。

INSERT INTO user VALUES(3, "Tanaka");
SELECT *, ROWID FROM user;
1|Sato|1
4|Suzuki|2
8|Takahashi|3
11|Kato|9
3|Tanaka|10

新しいデータをいれて、見てみたら9の次に追加されていました。このことから、ROWID値を4と指定しないと11, 12, 13...となっていくことがわかりました。