11.【MySQL】テーブルに主キー(プライマリキー)を設定する方法

MySQLでは各レコードを一意に識別するためのカラムを設定するのが一般的です。このカラムを主キー(プライマリキー)として指定しておけば、値を入れ忘れたり、値が重複している時にエラーを返してくれるため便利です。

目次

主キー(PRIMARY KEY)の指定

実際にカラムを設定して主キーに指定してみましょう。

主キー用のカラムは id という名前で NULL ではない整数の連番にするのが一般的です。

id INT NOT NULL

カラムを主キーに指定するには

PRIMARY KEY (カラム名)

と記述します。

-- titlesという名前のテーブルがあれば削除
DROP TABLE IF EXISTS titles;

 -- titlesという名前のテーブルを作成
CREATE TABLE titles (
  id INT NOT NULL,
  author_id INT,
  post_title VARCHAR(50) UNIQUE,
  PRIMARY KEY (id)
);

-- レコードを挿入
INSERT INTO titles (id, author_id, post_title) VALUES
  (1, 1, 'MySQLとは'),
  (2, 2, 'SQLとはなにか'),
  (3 ,1, 'DockerでMySQLを使う方法');

SELECT * FROM titles;
主キーを設定

主キーはレコードを一意に識別するためのカラムなので、値が重複していては問題です。

実際に値を重複させてみましょう。

-- titlesという名前のテーブルがあれば削除
DROP TABLE IF EXISTS titles;

 -- titlesという名前のテーブルを作成
CREATE TABLE titles (
  id INT NOT NULL,
  author_id INT,
  post_title VARCHAR(50) UNIQUE,
  PRIMARY KEY (id)
);

-- レコードを挿入
INSERT INTO titles (id, author_id, post_title) VALUES
  (1, 1, 'MySQLとは'),
  (2, 2, 'SQLとはなにか'),
  (2 ,1, 'DockerでMySQLを使う方法');

SELECT * FROM titles;
主キーの値が重複するとエラーを返してくれる

このようにエラーを返してくれます。

主キーの値を自動連番にする(AUTO_INCREMENT)

主キーの値を自動的に連番で振るよう設定することもできます。

主キーのカラムに AUTO_INCREMENT を付けてあげましょう。

-- titlesという名前のテーブルがあれば削除
DROP TABLE IF EXISTS titles;

 -- titlesという名前のテーブルを作成
CREATE TABLE titles (
  id INT NOT NULL AUTO_INCREMENT,
  author_id INT,
  post_title VARCHAR(50) UNIQUE,
  PRIMARY KEY (id)
);

-- レコードを挿入
INSERT INTO titles (author_id, post_title) VALUES
  (1, 'MySQLとは'),
  (2, 'SQLとはなにか'),
  (1, 'DockerでMySQLを使う方法');

SELECT * FROM titles;

自動的に連番を振るようにしたので INSERT文では id の値を挿入しないようにします。

主キーの値を自動連番に設定する

ちゃんと自動的に連番が振られていることが確認できます。

このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。