13

我正在尝试使用以下方法删除一些外键:

ALTER TABLE `table` DROP FOREIGN KEY `fk_table_users1` , DROP FOREIGN KEY `fk_table_accounts1` , DROP FOREIGN KEY `fk_table_data1` ;

但它返回错误:

Error on rename of './db/table' to './db/#sql2-179c-288289' (errno: 152)

我跑SHOW ENGINE INNODB STATUS了,上面写着:

120725 12:38:37 Error in dropping of a foreign key constraint of table db/table,
in SQL command
ALTER TABLE `table` DROP FOREIGN KEY `fk_table_users1` , DROP FOREIGN KEY `fk_table_accounts1` , DROP FOREIGN KEY `fk_table_data1` 
Cannot find a constraint with the given id fk_table_users1.

SHOW CREATE TABLE 'table'输出:

CREATE TABLE `table` (
 `id` int(11) NOT NULL auto_increment,
 `data_id` int(11) NOT NULL,
 `account_id` int(11) NOT NULL,
 `status` enum('pending','complete') NOT NULL default 'pending',
 `created_at` datetime NOT NULL,
 `created_by` int(11) NOT NULL,
 PRIMARY KEY  (`id`),
 KEY `fk_orders_users1` (`created_by`),
 KEY `fk_orders_data1` (`data_id`),
 KEY `fk_orders_accounts1` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

但是,当我通过 phpmyadmin 查看结构时,它会列出具有相同名称的外键。在删除外键之前我需要做其他事情吗?

4

4 回答 4

11

没有外键。请参阅MySQL 文档,其中说

KEY is normally a synonym for INDEX.

所以基本上在表中你已经创建了索引,而不是外键。有关外键信息,请单击此处

于 2012-07-25T12:35:28.510 回答
2

您需要暂时删除约束,以便可以将其删除。

设置 FOREIGN_KEY_CHECKS=0;

然后在删除外键后再次打开它们:

设置 FOREIGN_KEY_CHECKS=1;

于 2018-01-19T19:20:14.680 回答
0

首先删除外键然后删除列

alter table 'table name' drop foreign key 'constraint id ;

如果您不知道约束 id,则在该约束 id 中创建数据库转储在转储文件中可用。

然后删除列..

于 2014-01-27T06:32:42.223 回答
0

索引名称和约束名称可能不同。您应该首先使用代码删除约束:ALTER TABLE tablename DROP FOREIGN KEY constraintname

于 2016-09-28T07:57:39.790 回答