以下を使用して、いくつかの外部キーを削除しようとしています。
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 = 1;
最初に外部キーをドロップし、次に列を削除します
テーブルの変更 'テーブル名'外部キーの削除 '制約ID;
制約IDがわからない場合は、その制約IDでデータベースダンプを作成し、ダンプファイルで使用できます。
次に、列を削除します。
インデックス名と制約名は同じでない場合があります。最初にコードを使用して制約を削除する必要があります:ALTER TABLE tablename DROP FOREIGN KEY constraintname