職案人

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

SQLiteのUNIQUE 制約

2020年06月08日 | sqlite
SQLiteのUNIQUE 制約


【開発環境】
OS:Win10(64ビット)
データベース:SQLite3
コマンドプロンプト入力

【UNIQUE制約とは】
カラムに格納する値として既に格納されているデータの値と重複した値を禁止したい場合、カラムに UNIQUE 制約を設定する
Microsoft Windows [Version 10.0.18363.836]
(c) 2019 Microsoft Corporation. All rights reserved.

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> create table user(id integer unique, name text);
sqlite>

データ入力
sqlite> insert into user values(1, 'Honda');
sqlite> insert into user values(2, 'Moriyama');
sqlite> insert into user values(4, 'Kudou');
sqlite> .header on
sqlite> .mode column
sqlite>
sqlite> select * from user;
id name
---------- ----------
1 Honda
2 Moriyama
4 Kudou

次に UNIQUE制約が設定されている id カラムの値として既に格納済のデータと同じ値を設定したデータを追加してみます
sqlite>
sqlite> insert into user values(2, 'Suzuki');
Error: UNIQUE constraint failed: user.id←エラー
sqlite>

なお UNIQUE 制約が設定されていても NULL は重複して格納することが可能
sqlite> insert into user values(null, 'Okuda');
sqlite> insert into user values(null, 'Katayama');
sqlite>
sqlite> select * from user;
id name
---------- ----------
1 Honda
2 Moriyama
4 Kudou
Okuda
Katayama
sqlite>
【複数のカラムの組み合わせにUNIQUE制約を設定する】
UNIQUE 制約を単独のカラムだけではなく複数のカラムの組み合わせに UNIQUE 制約を設定することも可能です
sqlite> create table staff(no integer, unit text, name text, unique(no, unit));
sqlite> insert into staff values(1, 'Sales', 'Takahashi');
sqlite> insert into staff values(4, 'Dev', 'Suzuki');
sqlite> insert into staff values(2, 'Office', 'Endou');
sqlite> select * from staff;
no unit name
---------- ---------- ----------
1 Sales Takahashi
4 Dev Suzuki
2 Office Endou
sqlite>
次に no カラムの値だけ既存のデータと同じデータや、 unit カラムの値だけ既存のデータと同じデータを追加してみます
sqlite> insert into staff values(4, 'Design', 'Fukuda');
sqlite> insert into staff values(7, 'Sales', 'Noda');
sqlite> select * from staff;
no unit name
---------- ---------- ----------
1 Sales Takahashi
4 Dev Suzuki
2 Office Endou
4 Design Fukuda
7 Sales Noda
sqlite>
sqlite> insert into staff values(2, 'Office', 'Mori');
Error: UNIQUE constraint failed: staff.no, staff.unit
sqlite>
no カラムと unit カラムが UNIQUE制約に成っているためエラーに成る

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする