MySQL 様々な制約
制約
主キー制約
テーブル作成時
パターン1
CREATE TABLE テーブル名 (列名 データ型 PRIMARY KEY, 列名 データ型...);
パターン2
CREATE TABLE テーブル名 (列名 データ型, 列名 データ型..., PRIMARY KEY (列名));
既存テーブルに追加
パターン1
ALTER TABLE 表名 MODIFY 列名 データ型 PRIMARY KEY;
パターン2
ALTER TABLE 表名 MODIFY ADD PRIMARY KEY(列名);
削除
ALTER TABLE 表名 DROP PRIMARY KEY;
NOT NULL 制約
NULL値を入れられなくする設定
テーブル作成時
CREATE TABLE テーブル名 (列名 データ型 NOT NULL, 列名 データ型...);
既存テーブルに追加
ALTER TABLE 表名 MODIFY 列名 データ型 NOT NULL;
削除
ALTER TABLE 表名 MODIFY 列名 データ型 NULL;
UNIQUE(一意)制約
カラム(列)に重複した値を格納できなくする
テーブル作成時
CREATE TABLE テーブル名 (列名 データ型 UNIQUE, 列名 データ型...);
既存テーブルに追加
パターン1
ALTER TABLE 表名 MODIFY 列名 データ型 UNIQUE;
パターン2
ALTER TABLE 表名 MODIFY ADD UNIQUE(列名);
削除
ALTER TABLE 表名 DROP INDEX 列名;
参照整合性制約
親表にないデータ値は子表に存在することはできない
テーブル作成時
CREATE TABLE テーブル名 (列名 データ型, 列名 データ型..., CONSTRAINT 制約名 FOREIGN KEY (列名) REFERENCES 参照先表 (参照先列名));
既存テーブルに追加
ALTER TABLE 表名 ADD CONSTRAINT 制約名 FOREIGN KEY(列名) REFERENCES 参照先表(参照先列名);
削除
ALTER TABLE 表名 DROP FOREIGN KEY 制約名; DROP INDEX 制約名 ON 表名;
親キーと子表を連動して更新・削除
連鎖更新
ON UPDATE CASCADE
連鎖削除
ON DELETE CASCADE
既定値
通常、データを入れないとNULL値となるが、NULL値ではなく設定された既定値が入る
テーブル作成時
CREATE TABLE テーブル名 (列名 データ型, DEFAULT 既定値,...);
* 文字の場合はシングルクォート「 ' 」で囲む
既存テーブルに追加
ALTER TABLE 表名 MODIFY 列名 データ型 DEFAULT 既定値;
削除
ALTER TABLE 表名 MODIFY 列名 データ型;
自動連番
自動で1ずつ加算されて数値が入る
- 整数型(INT型等)
- AUTO_INCREMENT キーワードを宣言
- PRIMARY KEY等を設定し一意にする
テーブル作成時
CREATE TABLE 表名 (列名 データ型 AUTO_INCREMENT PRIMARY KEY,...);
既存テーブルに追加
ALTER TABLE 表名 MODIFY 列名 データ型 AUTO_INCREMENT PRIMARY KEY;
初期値を変更
ALTER TABLE 列名 AUTO_INCREMENT = 初期値(数値);