実現したいこと
『外部キー制約がかかったままで、外部キー制約を持つテーブルから先に削除する』を知りたいです。
前提
テスト用に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
プレビュー