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 = 初期値(数値);