web-dev-qa-db-ja.com

MySQLの主キーを削除する

次のテーブルスキーマを使って、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

列の主キーを削除する方法

162
markb

インデックスがないと、オートインクリメントカラムを管理するのが非常に高価になります。そのため、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 KEYAUTO_INCREMENTにすることができます。

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

1行

ALTER TABLE  `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` )

また、自動インクリメントを失うことはなく、副作用がある可能性があるので再度追加する必要があります。

114
mluebke

私はQuassnoiがあなたの直接の質問に答えたと思います。ちょっとしたメモ:たぶんこれはあなたの側ではちょっと厄介な言葉ですが、あなたはあなたが3つの主キーを持っているという印象の下にあるように見えます、それぞれのフィールドに1つ。これはそうではありません。定義上、1つの主キーしか持てません。ここにあるのは、3つのフィールドを組み合わせた主キーです。したがって、「主キーを列にドロップする」ことはできません。主キーを削除することも、主キーを削除しないこともできます。 1列のみを含む主キーが必要な場合は、既存の主キーを3列にドロップして1列に新しい主キーを作成できます。

14
Jay
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
10
Alix Axel

複合主キーがある場合は、次のようにします。ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);

「主キーを復元した場合は、必ずAUTO_INCREMENTに戻してください。」

ID列の「PKプロパティを復元する」と「オートインクリメントプロパティを復元する」ことが望ましいかどうかについても、疑問はありません。

それがテーブルの以前の定義でオートインクリメントだったことを考えると、ID値を提供せずにこのテーブルに挿入するプログラムが存在する可能性が非常に高いです(とにかくIDカラムはオートインクリメントであるため)。

そのようなプログラムの操作はすべて、autoincrementプロパティを復元しないことによって中断されます。

5
Erwin Smout

最初に次のようにauto_incrementフィールドを削除するように列を変更します。

次に、主キーを削除します。変更表user_customer_permissionドロップ主キー。

3
John Gunderman

私は同じ問題を抱えていたし、私のテーブル内のいくつかの値のほかに。主キーを次のように変更しましたが

ALTER TABLEuser_customer_permissionDROP PRIMARY KEY , ADD PRIMARY KEY (id)

問題は私のサーバーで続いた。テーブル内に新しいフィールドを作成し、新しいフィールドに値を転送して古いフィールドを削除したところ、問題は解決しました。

1
Sam

SQLマネージャでテーブルを探し、それを右クリックして[design]を選択し、次に小さいキーのアイコンを右クリックして[主キーの削除]を選択します。

0
Noob Helper

列に追加主キーを追加します。

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

テーブルから削除主キーへ。

ALTER TABLE table_name DROP PRIMARY KEY;
0
sumit katiyar

まずデータベースをバックアップします。次に、そのテーブルに関連付けられている外部キーを削除します。外部キーテーブルを切り捨てます。現在のテーブルを切り捨てます。必要な主キーを削除してください。 sqlyogまたはworkbenchまたはheidisqlまたはdbeaverまたはphpmyadminを使用してください。

0
Noby Nirmal