MySQL: 无法 drop/remove 外键

MySQL: Unable to drop/remove foreign key

这是我到目前为止尝试过的方法:

mysql> alter table wp_delayedCoupons_visits remove foreign key fk_targets_visits;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'foreign key fk_targets_visits' at line 1

mysql> alter table wp_delayedCoupons_visits drop foreign key fk_targets_visits;
ERROR 1091 (42000): Can't DROP 'fk_targets_visits'; check that column/key exists

还有反引号

mysql> alter table `wp_delayedCoupons_visits` remove foreign key `fk_targets_visits`;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'foreign key `fk_targets_visits`' at line 1

mysql> alter table `wp_delayedCoupons_visits` drop foreign key `fk_targets_visits`;
ERROR 1091 (42000): Can't DROP 'fk_targets_visits'; check that column/key exists

mysql> show columns in wp_delayedCoupons_visits;

+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| visitId           | mediumint(5) | NO   | PRI | NULL    | auto_increment |
| visitorId         | mediumint(9) | NO   |     | NULL    |                |
| urlVisited        | varchar(500) | NO   |     | NULL    |                |
| fk_targets_visits | mediumint(5) | NO   | UNI | NULL    |                |
+-------------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

有没有人知道是什么导致约束不能删除或删除?

alter table wp_delayedCoupons_visits remove foreign key fk_targets_visits;

错误消息说明了一切。存在语法错误,因为在 mysql.

中不存在像 remove 这样的删除键

alter table wp_delayedCoupons_visits drop foreign key fk_targets_visits;

语法正确,但您实际上是在尝试使用 column name (fk_targets_visits) 删除密钥,而您必须使用实际的 constraint name 而不是 fk_targets_visits。如果您不知道使用的约束名称或默认分配的约束名称,请使用以下查询找出约束名称(将 DB_NAME 更改为您的实际数据库名称):

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE
REFERENCED_TABLE_SCHEMA = 'DB_NAME' AND REFERENCED_TABLE_NAME = 'wp_delayedCoupons_visits' AND REFERENCED_COLUMN_NAME = 'fk_targets_visits';

您显然有一个名为 fk_targets_visitscolumn,但没有一个外键约束,甚至以 fk_ 前缀命名。

使用

查找
show create table `wp_delayedCoupons_visits`

如果此 table 中存在外键,然后通过

重新发出您的命令
alter table `wp_delayedCoupons_visits` drop foreign key fk_coup_visits 

假设外键名 fk_coup_visits 确实存在。