さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

データベースのデータ移行時に外部キー制約を一時的に無効化したい

基本的には以下のようにやればよい。

sample.sql

set foreign_key_checks = 0;

<SQL文の処理>

set foreign_key_checks = 1;

実行コマンド

$ source sample.sql

しかし、上記のコマンドではそのセッション内でしか有効でないため、以下のようにやると外部キー制約が無効化されていない。

set foreign_key_checks = 0;
<何らかの自作ツールでの処理>
set foreign_key_checks = 1;

ツールの処理の中でやってしまえばよいのだが もし、ツールの中でやらずに別で実施したい場合は「global」をつけて以下のようにやる。

set global foreign_key_checks = 0;
<何らかの自作ツールでの処理>
set global foreign_key_checks = 1;

このように一時的に無効化できる機能があるのはすばらしい。

以上