MySQLでは各レコードを一意に識別するためのカラムを設定するのが一般的です。このカラムを主キー(プライマリキー)として指定しておけば、値を入れ忘れたり、値が重複している時にエラーを返してくれるため便利です。
目次
主キー(PRIMARY KEY)の指定
実際にカラムを設定して主キーに指定してみましょう。
主キー用のカラムは id という名前で NULL ではない整数の連番にするのが一般的です。
1 | id INT NOT NULL |
カラムを主キーに指定するには
1 | PRIMARY KEY (カラム名) |
と記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -- 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; |

主キーはレコードを一意に識別するためのカラムなので、値が重複していては問題です。
実際に値を重複させてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -- 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 を付けてあげましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | -- 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 の値を挿入しないようにします。

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