SQLの制約の種類
- NOT NULL制約
- チェック制約
- 一意性制約(UNIQUE KEY)
- 主キー制約 (PRIMARY KEY)
- 参照整合性制約、外部キー制約 (FOREIGN KEY)
NOT NULL
- NULL値を禁止
CREATE TABLE product
(
product_id INT PRIMARY KEY ,
product_name VARCHAR(16) UNIQUE NOT NULL ,
price INT
) ;
CHECK
- 条件を指定し、条件を満たさないデータを禁止
CREATE TABLE user
(
user_id INT PRIMARY KEY ,
age INT ,
city_code CHAR(4) ,
gender CHAR(1),
CONSTRAINT agecity_check CHECK(age >= 18 OR city_code = '0003'),
CONSTRAINT gendercheck CHECK(gender IN('M', 'F')))
) ;
UNIQUE KEY
- 重複したデータを禁止
- 複数の列に設定可能
- NULLを禁止するわけではない
CREATE TABLE user
(
user_id INT PRIMARY KEY ,
telephone CHAR(8)
addreess VARCHAR(255),
UNIQUE (telephone, address)
) ;
PRIMARY KEY
- 一意を保証
- 重複とNULLを禁止
- 1つのテーブルに1つ
CREATE TABLE user
(
user_id INT PRIMARY KEY ,
telephone CHAR(8)
age INT,
) ;
- 複合主キーの指定
CREATE TABLE price
(
shop_code CHAR(4) ,
product_code CHAR(4) ,
price INT ,
PRIMARY KEY(shop_code , product_code)
) ;
FOREIGN KEY
- 他のテーブルの列を参照し、その列にないデータを禁止
CREATE TABLE order
(
order_id INT PRIMARY KEY ,
shop_code CHAR(5) ,
product_code CHAR(4) ,
number INT ,
date DATE ,
FOREIGN KEY (shop_code)
REFERENCES shop_table(shop_code) ,
FOREIGN KEY (product_code)
REFERENCES product_table(product_code)
) ;
- 2つの列の外部参照
CREATE TABLE item
(
maker_id CHAR(10) ,
product_id CHAR(10) ,
PRIMARY KEY (maker_id , product_id)
) ;
CREATE TABLE dealer
(
shop_id CHAR(10) NOT NULL ,
maker_id CHAR(10) NOT NULL ,
product_id CHAR(10) NOT NULL ,
PRIMARY KEY (shop_id , maker_id , product_id) ,
FOREIGN KEY (maker_id , product_id)
REFERENCES item(maker_id , product_id)
) ;
制約に名前をつける
CONSTRAINT <制約の名前> <制約>
制約の削除
ALTER TABLE <テーブル名> DROP CONSTRAINT <制約の名前> ;
デフォルト値を設定
CREATE TABLE product
(
product_id INT NOT NULL PRIMARY KEY ,
name CHAR(16) UNIQUE,
price INT DEFAULT 2000
) ;