LoginSignup
0
0

More than 5 years have passed since last update.

mariadbでテーブルのデータを他のテーブルに読み込む方法

Last updated at Posted at 2016-07-11

例えば、Aというテーブルにデータがあって、
後日その更新版のA'というCSVデータが入手されたときに、

Aにキーが存在しないデータは追加、

Aにもともと存在しているデータで、
キーが一致するものに関してはA'のデータで更新

A'に存在しないデータはそのまま残しておく

というような運用がしたいことはままあると思います。
(残さなくてよければ TRUNCATE → LOAD DATA INFILE でいいのでしょうが)

データ量が多い場合は、
いちいち読み込ませるのも非効率ですので、

Aと同じ構造のA'テーブルにA'のデータを読み込ませて、

REPLACE INTO table_A SELECT * FROM table_A' WHERE hoge_id IS NOT NULL;

などとするのがいいのではないかと。
(今回利用したCSVデータはキーが入るべきところに空行が入っているようなお行儀の悪いCSVデータなので、table_Aは hoge_id を PRIMARY にしていますが、 table_A'はそのまま読み込ませています)

INSERT IGNORE INTO

とか

INSERT INTO ON DUPLICATE KEY UPDATE

とかよりドンピシャな動作だと思いました。

REPLACEは
MySQL拡張みたいですね。
(MySQLとMariaDB以外のデータベースエンジンでは利用できないらしい)

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.8 REPLACE 構文

REPLACE - MariaDB Knowledge Base

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0