mysql load data 與 select into outfile 配合實現文本文件導入導出

 

mysql數據導入導出經過下面的這種方式可以快速的實現百萬千萬級數據的快速導入導出。html

  • 導出到文件中(select into outfile)
SELECT fields INTO OUTFILE 'file_name' 
    [{FIELDS | COLUMNS}                     字段
        [TERMINATED BY 'string']                字段之間分隔符號
        [[OPTIONALLY] ENCLOSED BY 'char']       字段被包含在char中間
        [ESCAPED BY 'char']                     忽略字段裏出現的char
    ]
    [LINES
        [STARTING BY 'string']              忽略開頭是string的行
        [TERMINATED BY 'string']            行分隔符
    ]
FROM test_table;

導出:mysql

secure_file_priv配置項sql

若是配置了這個,則只能導入到該目錄下面。能夠去改配置項,而後重啓數據庫

 改成「」便可,改爲null會致使不能導出。bash

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_privserver

  • 導入文件中的數據到mysql表
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]                      遇到重複的時候處理方法,替換或者是忽略
    INTO TABLE tbl_name                     導入數據的目的表名
    [PARTITION (partition_name,...)]        分區選擇
    [CHARACTER SET charset_name]            字符集
    [{FIELDS | COLUMNS}                     字段
        [TERMINATED BY 'string']                字段之間分隔符號
        [[OPTIONALLY] ENCLOSED BY 'char']       字段被包含在char中間
        [ESCAPED BY 'char']                     忽略字段裏出現的char
    ]
    [LINES
        [STARTING BY 'string']              忽略開頭是string的行
        [TERMINATED BY 'string']            行分隔符
    ]
    [IGNORE number {LINES | ROWS}]          忽略行/列
    [(col_name_or_user_var,...)]            目的表的表字段名或者用戶變量名
    [SET col_name = expr,...]               設置表字段值

實例:htm

導入數據到數據庫blog

建一個簡單的用戶表:文檔

CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL DEFAULT '',
`age` int(11) NOT NULL DEFAULT '0',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '建立時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

創建一個user.csv文件,數據以下;get

文本以下:

假設這個裏面有不少不少用戶,比方說20條。。。

LOAD DATA LOCAL INFILE 'D:\\test\\user.csv' INTO TABLE `user` FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 LINES (`name`,@dummy, age) 

將表裏面的第一列用戶名和第三列年齡導入到數據庫中去,中間的中文名咱們不關心,不要。第一行是列名,不要。

PS:@dummy是看官方文檔給的,就是個普通變量,給賦值,可是沒用到,幫咱們實現了忽略列的做用。自己沒提供忽略列的功能。

插入成功。

參考:

https://dev.mysql.com/doc/refman/5.7/en/load-data.html

相關文章
相關標籤/搜索