MySQLのforeign_key_checksはデータベース全体に影響する?スコープと設定方法を解説
MySQLのforeign_key_checksはセッションベースで動作するシステム変数です。つまり、適用範囲(スコープ)として「ローカル(セッション)」または「グローバル」のどちらかを指定できます。以下に、それぞれのスコープでの設定例を紹介します。どちらのスコープもセッションに対して設定することが可能です。
スコープの設定方法
まず、セッションスコープとグローバルスコープのそれぞれで設定してみましょう。
mysql> set foreign_key_checks = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global foreign_key_checks = 0;
Query OK, 0 rows affected (0.05 sec)
foreign_key_checksはサーバーシステム変数です。詳細な仕様は以下の表の通りです。
| プロパティ | 値 |
|---|---|
| システム変数 | foreign_key_checks |
| スコープ | グローバル、セッション |
| 動的変更 | 可能 |
| 型 | ブール値(Boolean) |
| デフォルト値 | ON |
foreign_key_checksを0に設定した場合
foreign_key_checks = 0に設定すると、データ定義ステートメント(DDL)の動作に影響を与えます。具体的には、DROP SCHEMAを実行すると、スキーマ外部のテーブルから参照される外部キーを持つテーブルがスキーマ内に存在していても、そのスキーマを削除できます。同様に、DROP TABLEも、他のテーブルから参照される外部キーを持つテーブルをそのまま削除できるようになります。
foreign_key_checksを1に戻した場合
foreign_key_checks = 1に戻しても、既存のテーブルデータに対するスキャンは実行されません。そのため、foreign_key_checks = 0の期間中にテーブルへ追加された行は、参照整合性の検証が行われないまま残る点に注意が必要です。
まとめ
foreign_key_checksはセッション単位で制御できるため、特定の接続だけ一時的に外部キーチェックを無効化することが可能です。一方、SET GLOBALを使えばサーバー全体(データベース全体)に影響を与えることもできます。大量データのインポートやスキーマ削除などの操作で便利ですが、整合性が検証されないデータが残るリスクがあるため、使用後は必ずデフォルト値(ON)に戻すことをおすすめします。
-
MySQLのデータベースファイルはどこに保存される?保存場所の確認方法
MySQLがデータベースファイルを実際にどのディレクトリへ保存しているのかを確認したい場合は、システム変数 @@datadir を参照するのが最も簡単な方法です。この記事では、その確認手順と、取得したパスにデータベースが正しく存在することを検証する方法までを解説します。 @@datadirでデータディレクトリを確認する まず、以下のようにSELECT文で@@datadirの値を取得します。 mysql> SELECT @@datadir; 実行結果の例 +---------------------------------------------+ | @@datadir
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す