MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでFOREIGN_KEY_CHECKSが1に設定されているか確認する方法

MySQLでは、外部キー制約(FOREIGN KEY)のチェック機能が有効になっているかどうかを、システム変数 @@foreign_key_checks を使って簡単に確認できます。この値が「1」(ON)の場合は外部キーチェックが有効、「0」(OFF)の場合は無効です。ここでは、foreign_key_checks が1に設定されているかを確認する2つの方法を紹介します。

方法1:SELECT文で変数の値を確認する

@@foreign_key_checks 変数の値を直接SELECT文で参照する方法です。構文は以下のとおりです。

select @@foreign_key_checks;

実際に実行してみましょう。

mysql> SELECT @@foreign_key_checks;

実行結果は次のとおりです。

+----------------------+
| @@foreign_key_checks |
+----------------------+
| 1                    |
+----------------------+
1 row in set (0.00 sec)

結果が「1」と表示されているため、外部キーチェックが有効になっていることがわかります。

方法2:SHOW VARIABLESコマンドで確認する

もうひとつの方法として、SHOW VARIABLES コマンドを使うこともできます。「LIKE 'foreign%'」を指定することで、foreignから始まる変数だけを絞り込んで表示できます。構文は以下のとおりです。

show variables like 'foreign%';

実際に実行してみます。

mysql> show variables like 'foreign%';

実行結果は次のとおりです。

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| foreign_key_checks | ON    |
+--------------------+-------+
1 row in set (0.01 sec)

値が「ON」と表示されているため、こちらの方法でも外部キーチェックが有効であることを確認できました。

確認結果の見方まとめ

  • 1 / ON … 外部キーチェックが有効(デフォルトの状態)
  • 0 / OFF … 外部キーチェックが無効

なお、大量データのインポートやテーブルの再構築を行う際には、処理速度向上のために一時的に SET FOREIGN_KEY_CHECKS=0; で無効化することがあります。ただし、そのまま放置すると参照整合性が損なわれる恐れがあるため、作業完了後は必ず SET FOREIGN_KEY_CHECKS=1; で元に戻すことをおすすめします。

  1. MySQLで外部キー(FOREIGN KEY)を使う方法|InnoDBの制約とALTER構文を解説

    本記事では、MySQLにおける外部キー(FOREIGN KEY)の基本的な考え方と、実際の設定方法をサンプルSQL付きで解説します。 MySQLの外部キーの基本 InnoDBテーブルは、外部キー制約(FOREIGN KEY制約)のチェックをサポートしています。ただし、単に2つのテーブルを結合(JOIN)するだけであれば、外部キー制約は必須ではありません。外部キーは、テーブル間の参照整合性を保証したい場合に活用する仕組みです。 一方で、InnoDB以外のストレージエンジンを使用している場合は注意が必要です。REFERENCES tableName(colName) という構文を記述しても実際の効

  2. 【SQL Server】削除時にNULLを設定する外部キー(ON DELETE SET NULL)の作成方法

    本記事では、SQL Serverにおける「ON DELETE SET NULL」制約付きの外部キー(FOREIGN KEY)について、その動作の仕組みと、CREATE TABLE文・ALTER TABLE文を使った具体的な作成方法を、サンプルコード付きでわかりやすく解説します。 ON DELETE SET NULL付き外部キーとは? 「ON DELETE SET NULL」を指定した外部キーでは、親テーブルのレコードが削除されると、子テーブル側の対応するレコードの外部キー列の値が自動的にNULLに更新されます。このとき、子テーブルのレコード自体は削除されず、SQL Server上にそのまま残