はじめに
複数のMySQLデータベース間でデータのバックアップ・リストアをHeidiSQLで行っていますが、バックアップ時の設定によるリストア時の動作の違いがいまいち良く分からなかったので調べて見ました。
調査結果のまとめ
「データベースをSQLとしてエクスポート」メニュー実行時の動作をまとめました。
「データ」欄の表記 | リストア時に 実行されるSQL文 |
実行結果 |
---|---|---|
削除して挿入 | DELETE FROM の後に INSERT INTO |
・既存レコードを新レコードで総入れ替え |
挿入 | INSERT INTO | ・レコードのインサートのみ ・キー重複レコードがあるとエラーが発生 →1レコードもインサートされない ・既存レコードは削除されない |
挿入を無視 | INSERT IGNORE INTO | ・レコードのインサートのみ ・キー重複レコードは更新されない ・既存レコードは削除されない |
既存のデータを置換 | REPLACE INTO | ・レコードのインサートのみ ・キー重複レコードは更新される ・既存レコードは削除されない |
データなし | - | ・出力ファイルにレコードは含まれない |
なお、テーブルのドロップにチェックを入れた場合はリストア時にいったんテーブルが削除されるため、どれを選択しても総入れ替えになります。