使用select ... into outfile 'filename' 可以把数据库中表或视图中的数据按某种格式导出到文件中。
使用load data infile 'filename' into table tble_name这是把文件中的数据导入到数据库的表中。
在使用load data infile 'filename' into table时遇到了下面的错误:
例:
load data infile "/test/test_view.csv" into table test_view fields terminated by ',';
错误:ERROR 1262 (01000): Row 1 was truncated; it contained more data than there were input columns
这个错误网上查看有很多原因,我这里是原因其实很低级,test_view其实是一个view.字段不匹配。(很低级,时间长了没有意识到这个一个view:()
一些注意事项:
语法:
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'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number {LINES | ROWS}] [(col_name_or_user_var,...)] [SET col_name = expr,...]
如果PARTITION 这个选项使用时,文件的某些数据行不能满足指定的分区时,就会出现错误:Found a row not matching the given partition set.
如果CHARACTER SET选项使用时,这样就可以指定文件使用的字符集。默认解析文件中的数据时使用数据库的默认字符集(由系统变量character_set_database指定的字符集来处理,注意不是客户端系统变量character_set_client来处理的)。ucs2, utf16, utf16le, or utf32这些字符集是不能使用的,所以要保证你的文件没有使用这些字符集。如何查看系统中字符集信息。:
show variables like '%char%';
+--------------------------+-------------------------------------------+
| Variable_name | Value |
+--------------------------+-------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | E:\MySQL\MySQL Server\share\charsets\ |
+--------------------------+-------------------------------------------+
8 rows in set (0.02 sec)
如果没有设置Fields和lines选项,这其效果等同于使用tab分隔字段,使用双反斜杠代表文件中的一个反斜杠字符。,每个字段没有使用任何引号来包含。换行符判断符为\n。注意如果文件是在windows系统中生成的,你可能需要只能Lines terminated by '\r\n'。因为windows系统中使用'\r\n'作为换行符。
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
如果使用IGNORE number {LINES | ROWS}选项,可以指定从number+1行开始读数据。如在文件数据的第一行为table header的时候,就可以使用ignore 1 lines来实现从第二行开始读数据。
通过设定列名或自定义变量列表(col_name_or_user_var,...),来指定导入到相应的列中。
例如:LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
例如:
LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @var1) SET column2 = @var1/100;
SET子句用来补充那些不能从文件中获取的值。
你可能遇到的错误:
ERROR 1366 (HY000): Incorrect string value: '\xC4\xE3\xBA\xC3' for column 这个就是字符集的问题,通过character set来设置文件使用的字符集即可解决。
ERROR 1261 (01000): Row 2 doesn't contain data for all columns 这个顾名思义就是缺少数据。查看文件解决。
更多详细资料请看 http://dev.mysql.com/doc/refman/5.6/en/load-data.html