問題:如何從 MySQL 表中的欄位中移除主鍵,同時保留一個主鍵?
場景:
考慮下表將使用者客戶對應到即時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 dropprimary key; 來執行此操作;導致錯誤:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
答案:
自動增量列需要索引。如果沒有索引,維護自動增量列就會變得太昂貴。因此,MySQL 要求自動增量列位於索引的最左邊。
要從 user_customer_id 和 Permission_id中刪除主鍵,請依照下列步驟操作:
刪除自動增量屬性來自id:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
刪除主鍵:
ALTER TABLE user_customer_permission DROP PRIMARY KEY;
請注意,複合PRIMARY KEY最初覆蓋了所有三列,並且不保證 id 是唯一的。但是,如果 id 恰好是唯一的,您可以將其設為 PRIMARY KEY 並再次自動遞增:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
以上是如何在MySQL中刪除多個主鍵並保留一個主鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!