実現したいこと
『外部キー制約がかかったままで、外部キー制約を持つテーブルから先に削除する』を知りたいです。
前提
テスト用にusersテーブルとdatasテーブルをCREATEしました。これを『usersを削除してからdatasを削除する方法』を探しています。
普通にdatasから削除すればいいだけの話ですが、
●なぜSET FOREIGN_KEY_CHECKS = 0;が以下で効かないのか?
●どうすれば効かせられるのか(先にusersを削除できるようになるのか)?
を知りたいということです。
発生している問題・エラーメッセージ
usersを先に削除すると、どうしてもこれが出ます。
#1217 - 子レコードがあります。外部キー制約違反です。
該当のソースコード
これがCREATEです。
SQL
1CREATE TABLE users ( 2 id INT UNSIGNED NOT NULL AUTO_INCREMENT, 3 user_name VARCHAR(255) NOT NULL, 4 PRIMARY KEY (id) 5); 6 7CREATE TABLE datas ( 8 id INT UNSIGNED NOT NULL AUTO_INCREMENT, 9 user_id INT UNSIGNED NOT NULL, 10 PRIMARY KEY (id), 11 CONSTRAINT foreifn_key FOREIGN KEY (user_id) REFERENCES users(id) 12);
上のCREATEをこう削除するとエラーです。
SQL
1DROP TABLE users; 2DROP TABLE datas;
試したこと
困ったことに、このように試しても同じエラーなのです。なぜなのでしょうか?
このようにSET FOREIGN_KEY_CHECKS = 0;を指定すれば、『外部キー制約がかかったままで、外部キー制約を持つテーブルから先に削除する』ことができるのではないのでしょうか?
SQL
1SET FOREIGN_KEY_CHECKS = 0; 2DROP TABLE users; 3DROP TABLE datas;
テスト用にCREATEしただけなのでとっとと削除したいのですが、いちいち外部キー制約の関係性を確認して削除をかけるのが手間に感じます。
今後この手間を感じたくないので、制約関係なしに削除する方法を知りたいです。
補足情報(FW/ツールのバージョンなど)
MySQLは「5.7」で、phpMyAdminのSQLタブで実行しています。
追記 (2023/06/09 10:47)
yambejp様のご回答に高評価がありますが未解決なので追記します。
下記の画像のように、yambejp様のご回答ですと惜しくもdatasの削除のみという状況で、エラーは同様のものが表示されます。
引き続き有識者の皆様からのご回答をお待ちしております。
何卒よろしくお願い申し上げます。
回答4件
あなたの回答
tips
プレビュー

