208

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

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

4

12 に答える 12

333

インデックスがないと、自動インクリメント列の維持にコストがかかりすぎるため、MySQL自動インクリメント列をインデックスの左端に配置する必要があります。

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

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

PRIMARY KEY3つの列すべてをカバーするコンポジットがあり、id一意であることが保証されていないことに注意してください。

それがたまたまユニークである場合、あなたはそれを何度も繰り返すことができPRIMARY KEYますAUTO_INCREMENT

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
于 2010-01-21T17:23:31.390 に答える
132

1行:

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

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

于 2010-01-21T17:51:40.670 に答える
17

@Quassnoiがあなたの直接の質問に答えたと思います。

ちなみに、これはあなたの側の厄介な言い回しかもしれませんが、各フィールドに1つずつ、合計3つの主キーがあるという印象を受けているようです。

これはそうではありません。定義上、主キーを持つことができるのは1つだけです。ここにあるのは、3つのフィールドを組み合わせた主キーです。

したがって、「主キーを列にドロップ」することはできません。主キーをドロップすることも、主キーをドロップしないこともできます。

1つの列のみを含む主キーが必要な場合は、既存の主キーを3つの列にドロップし、新しい主キーを1つの列に作成できます。

于 2010-01-21T17:45:48.467 に答える
12
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
于 2010-01-21T17:25:30.107 に答える
8

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

于 2015-11-20T08:58:42.080 に答える
5

「主キーを復元すると、必ずAUTO_INCREMENTに戻すことができます。」

ID列の「PKプロパティを復元する」と「自動インクリメントプロパティを復元する」ことが望ましいかどうかは疑問の余地がありません。

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

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

于 2010-01-21T18:30:45.390 に答える
3

まず、列を変更して、次のようにauto_incrementフィールドを削除します。altertable user_customer_permission modify column id int;

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

于 2014-09-04T05:57:22.240 に答える
2

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

ALTER TABLEuser_customer_permission DROP PRIMARY KEY , ADD PRIMARY KEY (id)

サーバーで問題が発生しました。テーブル内に新しいフィールドを作成し、値を新しいフィールドに転送して古いフィールドを削除しました。問題は解決しました。

于 2017-07-22T12:01:09.013 に答える
2

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

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

テーブルから主キーを削除します。

ALTER TABLE table_name DROP PRIMARY KEY;
于 2018-05-08T05:45:14.830 に答える
0

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

于 2016-08-14T20:53:17.223 に答える
0
ALTER TABLE `table_name` ADD PRIMARY KEY( `column_name`);
于 2019-10-24T03:27:48.357 に答える
-1

SQLマネージャーでテーブルを見つけて右クリックし、デザインを選択してから、小さなキーアイコンを右クリックして、[主キーの削除]を選択します。

于 2018-04-09T13:49:05.633 に答える