テーブルを削除するときに外部キー制約を無視するための MySQL のコード例の共有

黄舟
リリース: 2017-03-18 13:57:27
オリジナル
1505 人が閲覧しました

以下のエディターは、テーブルを削除するときに外部キー制約を無視する MySQL の簡単な実装を提供します。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って見てみましょう。テーブルの削除は特に一般的ではありません。テーブルを削除するときは、特に注意が必要です。ただし、開発プロセス中にスキーマ設計に問題が見つかり、既存のデータベース内のすべてのテーブルを削除して再作成することはよくあります。また、テスト中にもデータベース内のすべてのテーブルを再作成する必要があります。もちろん、多くの自動ツールでもそのようなことを行うことができます。

テーブルを削除するときに、次のエラー メッセージが表示されることがあります:

ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
ログイン後にコピー
これは、削除しようとしているテーブルのフィールドが他のテーブルの外部キーとして使用されているためです。そのため、このテーブル (親) を削除すると、 table) は、まず外部キーを持つテーブル (サブテーブル) を削除する必要があります。つまり、テーブルを削除するプロセスは、テーブルを作成するプロセスと同じである必要があります。

しかし、これは受け入れられないことがよくあります。一方で、テーブルが多すぎる場合、手動での並べ替えは少し受け入れられません。また、並べ替えのための自動ツールはありません (実際、不可能ではありません)。したがって、MySQL は、必要に応じて外部キー制約をチェックするかどうかを設定するための

変数

FOREIGN_KEY_CHECKS を提供します。

通常、これを行うことをお勧めします: まず、すべての DROP ステートメントを自動的に生成し、MyDatabaseName をデータベース名に置き換えます:

SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';
ログイン後にコピー

次に、次のコードを追加して、生成されたコードの前後に FOREIGN_KEY_CHECKS 変数を設定します。ステートメント:

SET FOREIGN_KEY_CHECKS = 0
-- DROP语句
SET FOREIGN_KEY_CHECKS = 1;
ログイン後にコピー

ただし、最後の文を忘れても問題ありません。この変数は

Session

に基づいており、クライアントを閉じて接続を再確立すると、この変数はデフォルトに戻ります。価値 。グローバル スコープで外部キー制約をチェックする必要がない場合 (この状況は比較的まれです)、次のようにすることができます:

または

set @@global.FOREIGN_KEY_CHECKS = 0;
ログイン後にコピー

以上がテーブルを削除するときに外部キー制約を無視するための MySQL のコード例の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!