LoginSignup
23
25

More than 5 years have passed since last update.

mysqlimportでTSVファイルからインポートする

Last updated at Posted at 2015-05-22

大前提

どのRDBでもTSV・CSVからのインポートは何かと面倒くさいので、TSVをインサートSQLに変換するスクリプトを自作しておいてSQLでインポートすることをお勧めする。 ただし、同じインポートを何回も行うことになり、かつデータが大量の場合は、調べる手間をかけても出来合いのツールで設定を組んでおくメリットがある。

基本

mysqlimport -u ユーザー名 --password=パスワード --local データベース名 テーブル名.txt

設定ファイル

~/.my.cnfにオプションを書いておけばmysqlimportコマンドを実行するときに省略できる。

my.cnf
[mysqlimport]
user=ユーザー名
password=パスワード
default-character-set=utf8
local
mysqlimport データベース名 テーブル名.txt

以降の説明では~/.my.cnfに書かれていることを前提にする。

インポートするファイル

  • インポートするファイルの名前はテーブル名.txtになっていること
  • タブ区切り(TSV)になっていること(区切り文字の変更方法は後述)

例:

use d1;
CREATE TABLE t1 (
  id int(11) primary key auto_increment,
  name varchar(250)
);
t1.txt
NULL     あいうえお
NULL     かきくけこ
NULL     さしすせそ

既存レコードはそのままにレコードを追加する場合

mysqlimport データベース名 テーブル名.txt

既存レコードを削除してからインポートする場合

mysqlimport -d データベース名 テーブル名.txt

制約を無視してインポートするには

primary keyやuniqueの制約を無視してインポートするには
(重複する行がある場合、既にある行が削除される)

mysqlimport -r データベース名 テーブル名.txt

CSVファイルをインポートするには

フィールド区切り文字を変更するには--fields-terminated-by=を使う。
他に
--fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=...というオプションがある。

auto_incrementなidをつけるのが面倒な場合

NULLと書いておけば自動的に採番される。

そうでなく固定で番号をつけておきたいときはvimで

%!cat -n

または

%!nl

idを1でない値から始めたい場合は(下記は50から)

%!nl -v 50

または

%!ruby -ne 'print ($. + 50).to_s + "\t" +  $_'
23
25
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
23
25