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でした。