MySQLで特定条件のデータのINSERT文を出力する方法

スポンサーリンク
スポンサーリンク

特定のデータでのみ発生する不具合の特定や検証を行う際に、一時的に本番(ステージング)と検証環境のデータをあわせたい場合もあるかと思います。
その際、全データを移行するのは大変なので、一部のデータを簡単にINSERT文として出力するための方法を書いていきたいと思います。

まずは、特定条件でINSERT文を出力する場合

BULK INSERT文での出力になります。
※コンソール上に出力されますので、ダンプファイルとして出力する場合には、末尾に「> dump.sql」を付け加えて、ファイルへ出力するようにすると大丈夫です。


$ mysqldump -uroot -t --compact db_name table_name --where='user_id=1'

INSERT INTO `table_name` VALUES 
(1,1,'test1',0,'2020-11-20 08:06:39','2021-01-05 02:21:12'),
(2,1,'test2',0,'2020-11-25 00:27:10','2021-01-05 02:30:24'),
(3,1,'test3',0,'2020-12-08 17:14:35','2021-01-05 02:28:49'),
(4,1,'test4',0,'2020-12-08 17:14:35','2021-01-05 02:28:49'),
(5,1,'test5',0,'2020-12-08 17:14:35','2021-01-05 02:28:49');

1行ずつ出力したい場合

BULK INSERT文ではなく、INSERT文を1行ずつ出力したい場合となります。
※「–skip-extended-insert」オプションを付ければ、1行ずつ出力されるようになります。


$ mysqldump -uroot -t --compact --skip-extended-insert db_name table_name --where='user_id=1'

INSERT INTO `table_name` VALUES (1,1,'test1',0,'2020-11-20 08:06:39','2021-01-05 02:21:12');
INSERT INTO `table_name` VALUES (2,1,'test2',0,'2020-11-25 00:27:10','2021-01-05 02:30:24');
INSERT INTO `table_name` VALUES (3,1,'test3',0,'2020-12-08 17:14:35','2021-01-05 02:28:49');
INSERT INTO `table_name` VALUES (4,1,'test4',0,'2020-12-08 17:14:35','2021-01-05 02:28:49');
INSERT INTO `table_name` VALUES (5,1,'test5',0,'2020-12-08 17:14:35','2021-01-05 02:28:49');

INSERT文にカラム名も出力する場合

本番(ステージング)と検証環境のカラム構成が異なる場合に、上記の方法でINSERT文を出力しインポートするとカラム数が異なるエラーが出てしまいますので、こちらで出力していた方が対応しやすくなるかと思います。
※「–complete-insert」オプションを付ければ、カラム名が付加されてINSERT文が出力されるようになります。


$ mysqldump -uroot -t --compact --complete-insert db_name table_name --where='user_id=1'

INSERT INTO `table_name` 
(`id`, `user_id`, `title`, `is_deleted`, `created_at`, `updated_at`) 
VALUES 
(1,1,'test1',0,'2020-11-20 08:06:39','2021-01-05 02:21:12'),
(2,1,'test2',0,'2020-11-25 00:27:10','2021-01-05 02:30:24'),
(3,1,'test3',0,'2020-12-08 17:14:35','2021-01-05 02:28:49'),
(4,1,'test4',0,'2020-12-08 17:14:35','2021-01-05 02:28:49'),
(5,1,'test5',0,'2020-12-08 17:14:35','2021-01-05 02:28:49');

コメント

タイトルとURLをコピーしました