MariaDB、MySQL 主キー+テーブル定義編

SQL
この記事は約3分で読めます。

データベースを設計する上で欠かせないのが「主キー」の定義です。
主キーは、各レコードを一意に識別するための重要なカラムであり、テーブルの構造を考える上で最初に決めておきたい要素のひとつです。

この記事では、PRIMARY KEY をはじめ、AUTO_INCREMENT、NOT NULL、SERIAL など、主キーに関係する代表的な型や制約について整理し、5つの具体例を通して実践的な使い方をわかりやすく解説します。

制約一覧

✅ 主キーに関連する属性・制約の意味(まず概要)

属性/制約名説明
SERIAL自動的に BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE を定義する便利な型
NOT NULL値の省略不可。必ず値が必要
DEFAULT値を指定しなかったときに自動で入る初期値
UNIQUE重複を許さない(=1つだけ)
PRIMARY KEYテーブルの主キー。(NOT NULL)」(UNIQUE)」が自動でつきます。
AUTO_INCREMENT自動で連番がふられる(通常は主キーに使う)

最も基本的な主キー定義(INT + AUTO_INCREMENT)

CREATE TABLE users (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(100),
  PRIMARY KEY (id)
);
SQL

🔸ポイント

  • id が主キーで自動連番
  • よく使うパターン。MySQL/MariaDBでは一番王道
  • PRIMARY KEY を使うだけなら NOT NULL は省略可能(自動で付く)
  • AUTO_INCREMENT を付ける場合は NOT NULL を明示しないといけない

SERIAL を使って一発で主キー定義

CREATE TABLE products (
  product_id SERIAL,
  name VARCHAR(100)
);
SQL

🔸ポイント

  • SERIAL = BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
  • 手軽に主キー相当のカラムを定義できる
  • 必ず UNIQUE になるが、PRIMARY KEY ではないので注意(明示的に指定したほうがよい)

自然キー(例:メールアドレス)を主キーにする

CREATE TABLE accounts (
  email VARCHAR(255) NOT NULL,
  name VARCHAR(100),
  PRIMARY KEY (email)
);
SQL

🔸ポイント

  • メールアドレスがユニークな主キーになる
  • AUTO_INCREMENT は使えないが、意味のある主キーとして使えるパターン

主キー+UNIQUEな別カラム(例:社員番号とログインID)

CREATE TABLE employees (
  id INT NOT NULL AUTO_INCREMENT,
  login_id VARCHAR(50) UNIQUE,
  name VARCHAR(100),
  PRIMARY KEY (id)
);
SQL

🔸ポイント

  • id が主キー
  • login_id は重複不可(UNIQUE制約)

複合主キー(2つのカラムを組み合わせて主キーにする)

CREATE TABLE orders (
  user_id INT,
  product_id INT,
  quantity INT,
  PRIMARY KEY (user_id, product_id)
);
SQL

🔸ポイント

単一のカラムでなくても主キーは作れる

user_id と product_id の組み合わせが主キー(1ユーザーが同じ商品を重複注文できないようにする)

コメント