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

制約を削除できるように、一時的に制約を削除する必要があります。

SET FOREIGN_KEY_CHECKS = 0;

外部キーをドロップした後、それらを再びオンにします。

SET FOREIGN_KEY_CHECKS = 1;

于 2018-01-19T19:20:14.680 に答える
0

最初に外部キーをドロップし、次に列を削除します

テーブルの変更'テーブル名'外部キーの削除'制約ID;

制約IDがわからない場合は、その制約IDにデータベースダンプを作成し、ダンプファイルで使用できます。

次に、列を削除します。

于 2014-01-27T06:32:42.223 に答える
0

インデックス名と制約名は同じではない可能性があります。最初にコードを使用して制約を削除する必要があります。ALTER TABLE tablename DROP FOREIGN KEY constraintname

于 2016-09-28T07:57:39.790 に答える