簡體   English   中英

在MySQL中刪除主鍵

[英]Remove Primary Key in 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

如何刪除列的主鍵?

沒有索引,維護一個自動增量列變得太昂貴了,這就是為什么MySQL要求將一個自動增量列作為索引的最左邊部分。

您應該在刪除鍵之前刪除autoincrement屬性:

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

請注意,您有一個涵蓋所有三列的復合PRIMARY KEY ,並且不能保證id唯一。

如果碰巧是唯一的,則可以再次將其設為PRIMARY KEYAUTO_INCREMENT

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

一條線:

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

您也不會丟失自動增量,而不必重新添加它可能會產生副作用。

我相信Quassnoi已經回答了您的直接問題。 附帶說明:也許這只是您措辭上的尷尬,但您似乎感覺到您擁有三個主鍵,每個字段一個。 不是這種情況。 根據定義,您只能有一個主鍵。 您在這里擁有的是一個主鍵,它是三個字段的組合。 因此,您不能“將主鍵放在列上”。 您可以刪除主鍵,也可以不刪除主鍵。 如果要一個僅包含一列的主鍵,則可以將現有的主鍵放在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字段,如下所示:alter table user_customer_permission修改列ID int;

接下來,放下主鍵。 修改表user_customer_permission刪除主鍵;

我有同樣的問題,並且表中還有一些值。 雖然我用

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

問題在我的服務器上繼續。 我在表內創建了新字段,然后將值轉移到新字段中並刪除了舊字段,問題解決了!

首先備份數據庫。 然后刪除與該表關聯的所有外鍵。 截斷外鍵表。截斷當前表。 刪除所需的主鍵。 使用sqlyog或workbench或heidisql或dbeaver或phpmyadmin。

在SQL管理器中找到表,右鍵單擊它並選擇設計,然后右鍵單擊小鍵圖標並選擇“刪除主鍵”。

在列中添加主鍵。

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

從表中刪除主鍵。

ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE `table_name` ADD PRIMARY KEY( `column_name`);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM