1. ホーム
  2. マイスル

[解決済み】MySQLで主キーを削除する

2022-04-13 18:28:44

質問

私は、ライブMySQLデータベース上でuser_customersをパーミッションにマッピングする以下のテーブルスキーマを持っています。

mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| id               | int(11) | NO   | PRI | NULL    | auto_increment |
| user_customer_id | int(11) | NO   | PRI | NULL    |                |
| permission_id    | int(11) | NO   | PRI | NULL    |                |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

user_customer_id と permission_id の主キーを削除して、id の主キーを保持したいのですが、どうすればいいですか?

コマンドを実行すると

alter table user_customer_permission drop primary key;

以下のようなエラーが発生します。

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

カラムの主キーを削除するにはどうすればよいですか?

どのように解決するのですか?

インデックスがない場合、オートインクリメントのカラムを維持するのは非常に高価になるため、以下のようになります。 MySQL は、オートインクリメントカラムがインデックスの左端にあることを要求しています。

キーを削除する前に、autoincrement プロパティを削除する必要があります。

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

複合型であることに注意してください。 PRIMARY KEY という3つのカラムをすべてカバーする id は一意であることが保証されない。

たまたま一意であった場合、それを PRIMARY KEYAUTO_INCREMENT をもう一度。

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;