🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

6004閲覧

ERROR 1091 (42000)が表示され、外部キー制約の削除ができない

Ryota.I

総合スコア22

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2019/09/16 10:26

編集2019/09/16 12:00

お世話になります。
MySQLにあらかじめ作成していた各テーブルごとの外部キー制約の張りなおしをしたく、既存の外部キー制約を削除実行をすると、下記の表示が出ます。

mysql> alter table ices drop foreign key ices_ibfk_1; ERROR 1091 (42000): Can't DROP 'ices_ibfk_1'; check that column/key exists mysql> alter table comments drop foreign key comments_ibfk_1; ERROR 1091 (42000): Can't DROP 'comments_ibfk_1'; check that column/key exists

以前、同様のエラーが出た際には、削除でき、張りなおしすることができましたが、今回は上記エラーのまま、削除ができない状況が続きます。
テーブルの構成上、何か他の要素を事前に削除する必要があるのでしょうか。

■知りたいこと:
既存の外部キー制約を削除するための確認するポイントと方法

お手数をおかけしますが、ご教示いただけると幸いです。

▽現在、外部キー制約を設定しているテーブルの構成です
■icesテーブル

+----------------+-----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+-----------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_id | int(11) | NO | MUL | NULL | | | manufacturer | varchar(50) | NO | | NULL | | | ice_name | varchar(50) | NO | | NULL | | | ice_fraver | varchar(50) | NO | | NULL | | | price_no_tax | int(5) unsigned | NO | | NULL | | | buy_year | int(4) unsigned | NO | | NULL | | | buy_month | int(2) unsigned | NO | | NULL | | | image_file | varchar(255) | YES | | NULL | | | created | datetime | YES | | NULL | | | modified | datetime | YES | | NULL | | | simple_comment | varchar(20) | NO | | NULL | | | desc_comment | varchar(100) | NO | | NULL | | | repeat_rate | int(11) | YES | | NULL | | | stock_rate | int(11) | YES | | NULL | | +----------------+-----------------+------+-----+---------+----------------+ mysql> show create table ices \G *************************** 1. row *************************** Table: ices Create Table: CREATE TABLE `ices` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `manufacturer` varchar(50) NOT NULL, `ice_name` varchar(50) NOT NULL, `ice_fraver` varchar(50) NOT NULL, `price_no_tax` int(5) unsigned NOT NULL, `buy_year` int(4) unsigned NOT NULL, `buy_month` int(2) unsigned NOT NULL, `image_file` varchar(255) DEFAULT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, `simple_comment` varchar(20) NOT NULL, `desc_comment` varchar(100) NOT NULL, `repeat_rate` int(11) DEFAULT NULL, `stock_rate` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `ices_ibfk_1` (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4

■commentsテーブル

+-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | ice_id | int(11) | NO | MUL | NULL | | | user_id | int(11) | NO | | NULL | | | comment | varchar(100) | NO | | NULL | | | repeat_rate | int(11) | YES | | NULL | | | stock_rate | int(11) | YES | | NULL | | | created | datetime | YES | | NULL | | | modified | datetime | YES | | NULL | | +-------------+--------------+------+-----+---------+----------------+ mysql> show create table comments \G *************************** 1. row *************************** Table: comments Create Table: CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ice_id` int(11) NOT NULL, `user_id` int(11) NOT NULL, `comment` varchar(100) NOT NULL, `repeat_rate` int(11) DEFAULT NULL, `stock_rate` int(11) DEFAULT NULL, `created` datetime DEFAULT NULL, `modified` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `comments_ibfk_1` (`ice_id`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 1 row in set (0.00 sec)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/16 11:55

その外部キーって、それぞれ何をやっているのか。
退会済みユーザー

退会済みユーザー

2019/09/16 11:59

内容からして、phpとかcakephpは全く関係ない。
退会済みユーザー

退会済みユーザー

2019/09/16 12:05

FOREIGN KEYって書いていないけど、本当に外部キーなのだろうか?
guest

回答1

0

ベストアンサー

関連するテーブル含めて、不適切なリレーションがあると、そうなるらしい。

参考:
外部キー制約について - Qiita
[MySQL] Cannot add foreign key constraint で怒られた | たきもと.com


show create table ~して、
FOREIGN KEYって書いていないから、
そもそも外部キーじゃない、ってオチじゃないよね?
「CONSTRAINT articles_ibfk_2 FOREIGN KEY (user_id) REFERENCES users (id) ON UPDATE CASCADE,」
とかなっていれば、このテーブルは外部キーを使ってるなってわかるけど。

投稿2019/09/16 12:02

編集2019/09/16 12:08
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ryota.I

2019/09/16 12:14

お返事ありがとうございます。 自分では気づけない点を、コメントいただけたことで確認できるきっかけとなりました。 いただいたコメントを元に、改めて削除をためし、また何かあれば追加で質問させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問