2019-02-14

mysqldumpに`--complete-insert`オプションをつけるとカラム名を含むINSERT文を出力してくれる

mysqldumpコマンドのデフォルト状態で出力されるINSERT文にはカラム名の情報が含まれていない。以下例(※ 見やすいようにインデントしている)。

INSERT INTO 
  `users` 
VALUES 
  (1,'taro',20,'male',1,'2019-02-13 23:44:02','2019-02-13 23:44:02'),
  (2,'jiro',30,'male',1,'2019-02-13 23:44:11','2019-02-13 23:44:11')
;

dump元とrestore先で全く同じテーブル構成であれば特に問題はないが、例えばカラム名の順番がちょっと違っているような場合だとデータがズレた状態でINSERTされることになってしまう。

そのようなときは、--complete-insert or -c オプションをつけてmysqldumpを実行するとカラム名を含んだINSERT文を出力してくれるようになる。

INSERT INTO 
  `users` (`id`, `name`, `age`, `sex`, `premium`, `created_at`, `updated_at`) 
VALUES 
  (1,'taro',20,'male',1,'2019-02-13 23:44:02','2019-02-13 23:44:02'),
  (2,'jiro',30,'male',1,'2019-02-13 23:44:11','2019-02-13 23:44:11')
;

ちなみにmysqldumpのmanを見るとそのままのことが書かれている

       o   --complete-insert, -c

           Use complete INSERT statements that include column names.