mysql數據導入導出通過下面的這種方式能夠快速的實現百萬千萬級數據的快速導入導出。
- 導出到文件中(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;
導出:
secure_file_priv配置項
如果配置了這個,則只能導入到該目錄下面。可以去改配置項,然后重啟
改為“”即可,改成null會導致不能導出。
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv
- 導入文件中的數據到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,...] 設置表字段值
實例:
導入數據到數據庫
建一個簡單的用戶表:
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文件,數據如下;
文本如下:
假設這個里面有很多很多用戶,比方說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是看官方文檔給的,就是個普通變量,給賦值,但是沒用到,幫我們實現了忽略列的作用。本身沒提供忽略列的功能。
插入成功。
參考: