MySQL刪除foreign key_ERROR 1025 (HY000): Error on rename of './test_20180206/cc' to './test_20180206/#sql2-9ac-e' (errno: 152)


問題背景描述:

首先,創建了一個主表,具有以下數據結構:

mysql> describe aa;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| ID    | int(11)  | NO   | PRI | NULL    | auto_increment |
| SecID | int(10)  | NO   | UNI | NULL    |                |
| name  | char(20) | NO   |     | NULL    |                |
| sex   | char(5)  | YES  |     | femal   |                |
+-------+----------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

然后,創建了一個從表,通過外鍵,與表aa的SecID屬性關聯起來:

mysql> create table bb  //創建表bb
    -> (SecID int(10) unique not null,
    -> room_num int(5) not null,
    -> extra binary default 0)
    -> engine=InnoDB;
Query OK, 0 rows affected (0.10 sec)
mysql> alter table bb add foreign key(SecID) references aa(SecID); //添加外鍵
Query OK, 0 rows affected (0.14 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

執行對bb表的外鍵刪除操作,出現以下error:

mysql> alter table cc drop foreign key SecID;
ERROR 1025 (HY000): Error on rename of './test_20180206/cc' to './test_20180206/#sql2-9ac-e' (errno: 152)

經過分析,筆者發現是因為創建外鍵時,外鍵名與屬性名一樣導致的。

因此,在創建外鍵時,最好加上外鍵的別名設置,以便於外鍵屬性的修改或刪除,命令如下:

mysql> alter table cc add constraint SECID foreign key(SecID) references aa(SecID);
mysql> alter table cc drop foreign key SECID;
Query OK, 0 rows affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

目前沒有找到外鍵名與屬性名一致時,刪除外鍵的徹底解決方法。

可以通過命令CREATE TABLE SELECT的命令將表結構及其數據進行備份,此時外鍵屬性是不會被復制的,就可以根據新表重新進行可靠的外鍵設置操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM