MySQL におけるデータ整合性制約の実装

データベーステーブルにおける制約とは、データの正確性と信頼性を確保するためのルールです。MySQL でサポートされる主な制約種類は以下の通りです:

  • NOT NULL: フィールド値が空値であることを禁止(例:ユーザー名、ID)
  • DEFAULT: フィールドにデフォルト値設定(例:性別)
  • PRIMARY KEY: 一意性と非空を保証(例:学生番号)
  • UNIQUE: 値の一意性を保証(例:座席番号)
  • FOREIGN KEY: 関連テーブル間の参照整合性を保証(例:所属部署ID)

制約追加のタイミング

  1. テーブル作成時
  2. テーブル変更時

列レベル制約とテーブルレベル制約

種類 サポート制約
列レベル 全ての制約(外部キーは完全機能せず)
テーブルレベル 非空・デフォルトを除く全て

主キーとユニーク制約の比較

特性 主キー ユニーク
一意性保証
NULL許可 ×
テーブル内数 1つまで 複数可

テーブル作成時の制約定義

列レベル制約の例

CREATE TABLE student_data (
  student_id INT PRIMARY KEY,
  full_name VARCHAR(30) NOT NULL UNIQUE,
  gender CHAR(1) CHECK(gender = 'M' OR gender = 'F'),
  seat_number INT UNIQUE,
  years INT DEFAULT 18,
  department_code INT REFERENCES departments(dept_code)
);

CREATE TABLE departments (
  dept_code INT PRIMARY KEY,
  dept_name VARCHAR(30)
);

テーブルレベル制約の例

CREATE TABLE student_data (
  student_id INT,
  full_name VARCHAR(30),
  gender CHAR(1),
  seat_number INT,
  years INT,
  department_code INT,

  CONSTRAINT pk_main PRIMARY KEY(student_id),
  CONSTRAINT uk_seat UNIQUE(seat_number),
  CONSTRAINT chk_gender CHECK(gender IN ('M','F')),
  CONSTRAINT fk_department FOREIGN KEY(department_code) 
    REFERENCES departments(dept_code)
);

テーブル変更時の制約操作

制約追加

-- 非空制約追加
ALTER TABLE student_data 
MODIFY COLUMN full_name VARCHAR(30) NOT NULL;

-- 外部キー制約追加
ALTER TABLE student_data 
ADD CONSTRAINT fk_dept 
FOREIGN KEY(department_code) 
REFERENCES departments(dept_code);

制約削除

-- 主キー削除
ALTER TABLE student_data DROP PRIMARY KEY;

-- 外部キー削除
ALTER TABLE student_data DROP FOREIGN KEY fk_dept;

タグ: MySQL データベース設計 主キー制約 外部キー制約 NOT NULL制約

8月14日 15:28 投稿