[解決済み] 外部キー制約の失敗
2022-09-28 02:12:33
質問
このエラーメッセージが表示されます。
ERROR 1217 (23000) at line 40: できません 親行を削除または更新できません。 外部キー制約に失敗しました。
... テーブルを削除しようとしたとき。
DROP TABLE IF EXISTS `area`;
... このように定義されています。
CREATE TABLE `area` (
`area_id` char(3) COLLATE utf8_spanish_ci NOT NULL,
`nombre_area` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
`descripcion_area` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
PRIMARY KEY (`area_id`),
UNIQUE KEY `nombre_area_UNIQUE` (`nombre_area`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
面白いのは
私はすでに他のすべてのテーブルを削除しました
に対する外部キーを持っている他の全てのテーブルを削除しました。
area
. 実際には、データベースは
area
テーブル以外は空っぽです。
データベース内に他のオブジェクトがない場合、どのようにして子行ができるのでしょうか?私の知る限り、InnoDBは他のスキーマに対する外部キーを許可していませんよね?
(私は
RENAME TABLE area TO something_else
コマンドを実行することもできます :-?)
どのように解決するのですか?
2つの可能性があります。
- 別のスキーマ (mysql の用語では "database") 内に、FK の参照を持つテーブルがある。
- innodb の内部データ辞書は mysql のものと同期していません。
ドロップが失敗した後に "SHOW ENGINE INNODB STATUS" を実行すると、それがどのテーブルであったか(とにかくそのうちの 1 つ)確認することができます。
後者のケースであることが判明した場合、可能であればサーバー全体をダンプしてリストアします。
MySQL5.1以上では、エラーメッセージにFKのあるテーブルの名前が表示されます。
関連
-
MySQLデータ型の詳細
-
MySQLインストールチュートリアル(Windows用)詳細
-
MySQLにおけるvarchar型とchar型の違い
-
Mysqlの使用中に発生したエラーの一部
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLで外部キー制約を一時的に無効にするにはどうすればよいですか?
-
[解決済み】外部キーを持つテーブルのカラムはNULLにできる?
-
[解決済み】外部キー制約。ON UPDATEとON DELETEを使用する場合
-
[解決済み】MySQLが一部の外部キーを削除する件
-
[解決済み] 外部キー制約をバイパスしてmysqlを強制的にドロップする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
mysqlにおけるvarcharの日付比較とソートの実装
-
MySQLのNULLについて解説した記事
-
mysqlインデックスが長すぎる特殊なキーが長すぎる解決策
-
[解決済み】DynamoDB : 提供されたキー要素がスキーマと一致しません。
-
Unknown character set.を解決する。MySQLデータベースインポート時の'utf8mb4'エラーの解消
-
[解決済み] なぜ SQLAlchemy の count() は生のクエリよりずっと遅いのでしょうか?
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新