MySQL导入csv文件小记

最近开发一个项目用MySQL作为数据库,设计了schema并让QA造了一批csv的数据。其中几个表用自增长的整数作为主键,表之间有相互引用的外键。为了保持外键引用关系,所有主键字段都要用csv中的值。这可能带来

自增字段产生的新值和导入的主键重叠的错误。解决此问题需要重设自增字段的起始值,可以用以下SQL语句实现:

alter table product set auto_increment = 1000;

 

此外,为方便开发者在自己的环境中导入csv数据,需要提供导入脚本。很多人自然会想到用

load data infile <csv file> into <table>

 但实际上,该方法指定的文件是MySQL服务器上的路径,它通常要用绝对路径或相对服务器所认为的某个根目录的相对路径(比如/var/lib/data)。不清楚这些隐含的规则往往会碰到自己无法理解的错误。但实际上,load data语句还支持local模式,此模式下,mysql将会从运行mysql客户端工具的主机上找csv文件,如果csv文件是用相对路径指定的,那么它从当前路径开始寻找。此外,如果csv文件中的字段都用双引号引用,那么在load

语句中必须用enclodsed指定,不然导入的数据不正确。以下是具体的实例:

load data local infile "../data/product.csv" into table product fields terminated by ',' enclosed by '"';
load data local infile "../data/revision.csv" into table revision fields terminated by ',' enclosed by '"';
load data local infile "../data/code_location.csv" into table code_location fields terminated by ',' enclosed by '"';
load data local infile "../data/program.csv" into table program fields terminated by ',' enclosed by '"';
load data local infile "../data/program_revision.csv" into table program_revision fields terminated by ',' enclosed by '"';
load data local infile "../data/user.csv" into table user fields terminated by ',' enclosed by '"';

 最后是load data的官方文档链接http://dev.mysql.com/doc/refman/5.1/en/load-data.html 。看来RTFM还真是真理。

你可能感兴趣的:(mysql)