Ошибка MySQL Drop внешнего ключа 152

Я пытаюсь удалить несколько внешних ключей, используя:

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, он отображает внешний ключ с тем же именем. Нужно ли мне что-то делать, прежде чем я могу сбросить внешние ключи?

Ответ 2

Вам необходимо временно удалить ограничение, чтобы его можно было удалить.

SET FOREIGN_KEY_CHECKS = 0;

а затем снова включите их после сброса внешнего ключа:

SET FOREIGN_KEY_CHECKS = 0;

Ответ 3

сначала удалить внешний ключ, а затем удалить столбец

изменить таблицу 'имя таблицы' drop foreign key 'идентификатор ограничения;

если вы не знаете идентификатор ограничения, создайте дамп базы данных, в котором этот идентификатор ограничения доступен в файле дампа.

затем удалите столбец.

Ответ 4

Имя индекса и имя ограничения могут быть не такими. Сначала следует удалить ограничение, используя код: ALTER TABLE tablename DROP FOREIGN KEY constraintname