Edited at

SQLの制約の種類とその指定方法

More than 3 years have passed since last update.


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
) ;