フィールドに設定できる値に制限を設けます。
制約 | 説明 |
---|---|
NOT NULL | NULLを設定できなくする。 |
UNIQUE | 同じ値を設定できなくする。 |
DEFAULT | 値が設定されないときに、指定した値を初期値とする。 |
PRIMARY KEY | 主キーとする。 |
「INTEGER PRIMARY KEY」と指定されたフィールドは、明示的に値を設定しないときは自動で連番が割り当てられます。
C:\>sqlite sample.sqlite SQLite version 2.8.17 Enter ".help" for instructions sqlite> create table user(id integer primary key,name); sqlite> insert into user(name) values('a'); sqlite> insert into user(name) values('b'); sqlite> .mode column sqlite> select * from user; 1 a 自動で1から連番が割り当てられている 2 b sqlite> insert into user values(10,'c'); sqlite> select * from user; 1 a 2 b 10 c 明示的に値を指定したときには、その値が設定される sqlite> insert into user(name) values('d'); sqlite> select * from user; 1 a 2 b 10 c 11 d 末尾のデータに続くように、連番が割り当てられている
自動で割り当てられている番号は、末尾のデータに続くように決定されます。よって末尾のデータを削除した後に新たなデータを追加すると、削除したデータの番号が再利用されます。これを防ぐには、「INTEGER PRIMARY KEY AUTOINCREMENT」とします。ただしこの機能は、SQLite 3.1.0以降でなければ使用できません。
C:\>sqlite3 sample.sqlite3 SQLite version 3.7.15.2 2013-01-09 11:53:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table user(id integer primary key,name); sqlite> insert into user(name) values('a'); sqlite> insert into user(name) values('b'); sqlite> insert into user(name) values('c'); sqlite> .mode column sqlite> select * from user; 1 a 2 b 3 c sqlite> delete from user where id=2; 途中のデータを削除 sqlite> select * from user; 1 a 3 c sqlite> insert into user(name) values('d'); sqlite> select * from user; 1 a 3 c 4 d 末尾のデータに連続するように、番号が割り当てられている sqlite> delete from user where id=4; 末尾のデータを削除 sqlite> select * from user; 1 a 3 c sqlite> insert into user(name) values('e'); sqlite> select * from user; 1 a 3 c 4 e 削除したデータの番号が再利用されている
sqlite> create table user2(id integer primary key autoincrement,name); sqlite> insert into user2(name) values('a'); sqlite> insert into user2(name) values('b'); sqlite> insert into user2(name) values('c'); sqlite> select * from user2; 1 a 2 b 3 c sqlite> delete from user2 where id=3; 末尾のデータを削除 sqlite> select * from user2; 1 a 2 b sqlite> insert into user2(name) values('d'); sqlite> select * from user2; 1 a 2 b 4 d 削除したデータの番号は使われていない
自動で割り当てられる番号 (オートナンバー) の最大値は、
です。
フィールドの制約に違反した場合の処理は、ON CONFLICTコマンドで設定します。
パラメータ | 処理 | 戻り値 |
---|---|---|
ROLLBACK | トランザクションがロールバックされる | SQLITE_CONSTRAINT |
ABORT | コマンドが中断される | |
FAIL | コマンドが失敗とされる | |
IGNORE | コマンドは実行されず、処理は継続される | なし |
REPLACE | 元のデータを上書きする |
たとえばUNIQUE制約に違反したときにREPLACEで元のデータを上書きするには、次にように指定します。
CREATE TABLE table ( field1 UNIQUE ON CONFLICT REPLACE, field2 );