SQLiteのカラム制約について
【開発環境】
OS:Windows 10 (64bit)
コマンドプロンプト
【カラムの制約】
PRIMARY KEY制約→カラムを主キーに設定する
書式
CREATE TABLE テーブル名(カラム名 PRIMARY KEY, ...);
または
CREATE TABLE テーブル名(カラム名1, カラム名2, ... ,
PRIMARY KEY(カラム名1, カラム名2, ...));
実行
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>
INTEGER 型の id カラムに PRIMARY KEY 制約を設定
sqlite> create table user(id int primary key, name text);
sqlite> .tables
personal user
sqlite> insert into user values(1, 'Yamada');
sqlite> insert into user values(2, 'Tanaka');
プライマリーキーを重複してみる
sqlite> insert into user values(1, 'Honda');
Error: UNIQUE constraint failed: user.id
sqlite>
【INTEGER型のカラムにPRIMARY KEY制約を設定する場合】
データ型が INTEGER のカラムに対して PRIMARY KEY 制約を設定した場合。新しいデータを追加する時に対象のカラムの値を省略すると、 AUTOINCREMENT 制約を設定した時と同じように自動的に数値が格納されます。
・ id カラムには値を指定せずにデータを格納してみる。
sqlite> insert into user(name) values('Andou');
sqlite> insert into user(name) values('Honda');
sqlite> insert into user(name) values('Yamashita');
sqlite> select * from user;
1|Andou
2|Honda
3|Yamashita
sqlite>
・表示
sqlite> select * from user;
1|Andou
2|Honda
3|Yamashita
sqlite>
・データ追加1
sqlite> insert into user values(8, 'Kanemoto');
sqlite>
sqlite> select * from user; 表示
1|Andou
2|Honda
3|Yamashita
8|Kanemoto
sqlite>
・データ追加2
sqlite> insert into user(name) values('Tokuda');
sqlite> select * from user; 表示
1|Andou
2|Honda
3|Yamashita
8|Kanemoto
9|Tokuda
sqlite>
・データ追加3--他のデータ型を入力する
sqlite> insert into user values('Hello');
Error: table user has 2 columns but 1 values were supplied
sqlite>
PRIMARY KEY 制約を設けないと
sqlite> create table numtest1(id integer);
sqlite>
sqlite> insert into numtest1 values('Hello');
sqlite> select * from numtest1;
Hello
sqlite>
※コメント投稿者のブログIDはブログ作成者のみに通知されます