次のテーブルスキーマを使って、user_customersを実際のMySQLデータベース上のパーミッションにマッピングします。
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;
3つの列すべてをカバーする複合PRIMARY KEY
があり、id
が一意であることが保証されていないことに注意してください。
もしそれがユニークであれば、再びPRIMARY KEY
とAUTO_INCREMENT
にすることができます。
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
1行
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` )
また、自動インクリメントを失うことはなく、副作用がある可能性があるので再度追加する必要があります。
私はQuassnoiがあなたの直接の質問に答えたと思います。ちょっとしたメモ:たぶんこれはあなたの側ではちょっと厄介な言葉ですが、あなたはあなたが3つの主キーを持っているという印象の下にあるように見えます、それぞれのフィールドに1つ。これはそうではありません。定義上、1つの主キーしか持てません。ここにあるのは、3つのフィールドを組み合わせた主キーです。したがって、「主キーを列にドロップする」ことはできません。主キーを削除することも、主キーを削除しないこともできます。 1列のみを含む主キーが必要な場合は、既存の主キーを3列にドロップして1列に新しい主キーを作成できます。
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
複合主キーがある場合は、次のようにします。ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
「主キーを復元した場合は、必ずAUTO_INCREMENTに戻してください。」
ID列の「PKプロパティを復元する」と「オートインクリメントプロパティを復元する」ことが望ましいかどうかについても、疑問はありません。
それがテーブルの以前の定義でオートインクリメントだったことを考えると、ID値を提供せずにこのテーブルに挿入するプログラムが存在する可能性が非常に高いです(とにかくIDカラムはオートインクリメントであるため)。
そのようなプログラムの操作はすべて、autoincrementプロパティを復元しないことによって中断されます。
最初に次のようにauto_incrementフィールドを削除するように列を変更します。
次に、主キーを削除します。変更表user_customer_permissionドロップ主キー。
私は同じ問題を抱えていたし、私のテーブル内のいくつかの値のほかに。主キーを次のように変更しましたが
ALTER TABLE
user_customer_permissionDROP PRIMARY KEY , ADD PRIMARY KEY (
id)
問題は私のサーバーで続いた。テーブル内に新しいフィールドを作成し、新しいフィールドに値を転送して古いフィールドを削除したところ、問題は解決しました。
SQLマネージャでテーブルを探し、それを右クリックして[design]を選択し、次に小さいキーのアイコンを右クリックして[主キーの削除]を選択します。
列に追加主キーを追加します。
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
テーブルから削除主キーへ。
ALTER TABLE table_name DROP PRIMARY KEY;
まずデータベースをバックアップします。次に、そのテーブルに関連付けられている外部キーを削除します。外部キーテーブルを切り捨てます。現在のテーブルを切り捨てます。必要な主キーを削除してください。 sqlyogまたはworkbenchまたはheidisqlまたはdbeaverまたはphpmyadminを使用してください。