MySQLで「Multiple primary key defined」というエラーが出力される。

 

こんにちは、KUJIRAです。MySQLで「CREATE TABLE」や「ALTER TABLE」を行ったときにエラーが出たのでまとめます。

 

事象

「CREATE TABLE」や「ALTER TABLE」を行った場合、以下のエラーが出力される。

 

mysql> CREATE TABLE test1 (id int(11) AUTO_INCREMENT, testval int(11), testval2 varchar(255), PRIMARY KEY (id), PRIMARY KEY(testval));
ERROR 1068 (42000): Multiple primary key defined

 
原因

原因はプライマリキーが2つ登録しようとしいることが原因です。今回のSQLでは、「CREATE TABLE」をする際、「PRIMARY KEY」句を2つ定義しているところが悪いです。この他、「ALTER TABLE」で既にテーブルにプライマリキーが設定されているのに新たに追加しようとしている場合あります。

 

対処

プライマリキーは複合で作成する場合はOKですが、二つ指定するということはできません。そのため今回の文では怒られてしまうわけです。プライマリキーに二つ以上のカラムを指定する場合は複合プライマリキーとして設定しなければなりません。今回の場合は以下のようにCREATE文を作成すれば大丈夫です。

 

mysql> CREATE TABLE test1 (id int(11) AUTO_INCREMENT, testval int(11), testval2 varchar(255), PRIMARY KEY (id, testval));
Query OK, 0 rows affected (0.01 sec)

 

また「ALTER TABLE」でプライマリキーを追加したい場合は、現在あるプライマリキーをはずしてあげる必要があります。

 

mysql> CREATE TABLE test1 (id int(11), testval int(11), testval2 varchar(255), PRIMARY KEY (id, testval));
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER TABLE test1 ADD PRIMARY KEY (testval2);
ERROR 1068 (42000): Multiple primary key defined
mysql> ALTER TABLE test1 DROP PRIMARY KEY;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE test1 ADD PRIMARY KEY (id, testval, testval2);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 

 

気をつけなければいけないのは、「AUTO_INCREMENT」が付いているカラムがある場合は強制的にプライマリキー隣ってしまうので、後から複合プライマリキーにしようと思っても一時的に削除できないので追加はできません。

必ずテーブル作成の時に複合プライマリキーにしましょう。

 

ということで今日はここまで、KUJIRAでした。