SQL振り返り【CREATE TABLE,制約,CREATE VIEW】
どうも。てちこまです。
前回に引き続きSQLで忘れていること、ん?ってなったところをまとめていきます。
今回はタイトル通りテーブルの作成と制約メインの記事となります。
Index
CREATE TABLE(テーブルの作成)
1 2 3 4 |
CREATE TABLE テーブル名 (列名 データ型 [DEFAULT値] [制約], 列名 データ型 [DEFAULT値] [制約], ....); |
※制約は複数設定できます。
DROP TABLE(テーブルの削除)
1 |
DROP TABLE テーブル名; |
制約
列制約とテーブル制約
列制約の例
1 2 3 |
CREATE TABLE テーブル名 (列名1 データ型 NOT NULL, 列名2 データ型 NOT NULL); |
テーブル制約の例
1 2 3 4 |
CREATE TABLE テーブル名 (列名1 データ型, 列名2 データ型, NOT NULL(列名1,列名2)); |
テーブル制約の場合例えば以下で供述する複合主キーの制約などで使用する。
NOT NULL制約
1 2 3 4 |
CREATE TABLE テーブル名 (.... 列名4 データ型 NOT NULL, 列名5 データ型); |
この場合列名4にはNULLを格納することができません。
PRIMARY KEY制約(主キー制約)
1 2 3 |
CREATE TABLE テーブル名 (列名1 データ型 NOT NULL,PRIMARY KEY, 列名2 データ型); |
プライマリーキー制約はテーブルの主キーを設定する制約。
NOT NULL制約を明示しない場合自動的にNOT NULL制約が付加される。
値が一意であることが保証され1つのテーブルに1つだけ設定できる。
複合主キーを設定したい場合はテーブル制約を利用する。
FOREIGN KEY制約(外部キー制約)
列制約
1 2 3 4 |
CREATE TABLE テーブル名( 列名1 データ型, 列名2 データ型 REFERENCES 親テーブル(参照列名) ); |
テーブル制約
1 2 3 4 5 6 |
CREATE TABLE テーブル名( 列名1 データ型, 列名2 データ型, 列名3 データ型, FOREIGN KEY(列名3) REFERENCES 親テーブル(参照列名) ); |
FOREIGN KEY制約(外部キー制約)により以下の整合性が保たれます。
- 親テーブルに存在していない参照列の値を列名3カラムに追加できない。
- 親テーブル側で参照されているデータを削除、更新できない。
UNIQUE制約(一意制約)
例
1 2 3 4 |
CREATE TABLE テーブル名( 列名1 データ型 PRIMARY KEY, 列名2 データ型, 列名3 データ型 NOT NULL UNIQUE); |
この場合列名1のカラムが主キーで列名3のカラムはNULLでなく重複しない値を入れなければ制約エラーになる。
CHECK制約
例
1 2 3 4 5 |
CREATE TABLE テーブル名( 列名1 データ型 PRIMARY KEY, 列名2 データ型, 列名3 データ型 CHECK( 列名3 >= 100) ); |
この例だと列名3カラムは100以上の値しか入れることができない。
おまけ
CREATE VIEW
1 |
CREATE VIEW ビュー名 AS SELECT文; |
DROP VIEW
1 |
DROP VIEW ビュー名; |
ビューを削除しても元表への影響はない。
CREATE INDEX
1 |
CREATE INDEX |
DROP INDEX
1 |
DROP INDEX テーブル名 インデックス名; |
まとめ
SQLでのテーブルの作成とか削除はサンプルぐらいしかないかも。
制約はORMだろうがなんだろうが必要ですね。
前にとあるシステム作成を行ったときに雑なテーブル設計でデータの不整合が頻発し大変な目にあいました。
リンク