Ответ 1
Нет внешних ключей. Обратитесь документации MySQL, в которой говорится
KEY is normally a synonym for INDEX.
Итак, в основном в таблице вы создали индексы, а не внешние ключи. Для информации о внешнем ключе, нажмите здесь
Я пытаюсь удалить несколько внешних ключей, используя:
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, он отображает внешний ключ с тем же именем. Нужно ли мне что-то делать, прежде чем я могу сбросить внешние ключи?
Нет внешних ключей. Обратитесь документации MySQL, в которой говорится
KEY is normally a synonym for INDEX.
Итак, в основном в таблице вы создали индексы, а не внешние ключи. Для информации о внешнем ключе, нажмите здесь
Вам необходимо временно удалить ограничение, чтобы его можно было удалить.
SET FOREIGN_KEY_CHECKS = 0;
а затем снова включите их после сброса внешнего ключа:
SET FOREIGN_KEY_CHECKS = 0;
сначала удалить внешний ключ, а затем удалить столбец
изменить таблицу 'имя таблицы' drop foreign key 'идентификатор ограничения;
если вы не знаете идентификатор ограничения, создайте дамп базы данных, в котором этот идентификатор ограничения доступен в файле дампа.
затем удалите столбец.
Имя индекса и имя ограничения могут быть не такими. Сначала следует удалить ограничение, используя код: ALTER TABLE tablename DROP FOREIGN KEY constraintname