快捷搜索:   nginx

Bash中使用MySQL导入导出CSV格式数据

MySQL中导出CSV格式数据的SQL语句样本如下:

Java代码
    select * from test_info into outfile '/tmp/test.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';  

MySQL中导入CSV格式数据的SQL语句样本如下:

Sql代码
    load data infile '/tmp/test.csv' into table test_info  fields terminated by ','  optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';  

里面最关键的部分就是格式参数

Sql代码
    fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n'  

这个参数是根据RFC4180文档设置的,该文档全称Common Format and MIME Type for Comma-Separated Values (CSV) Files,其中详细描述了CSV格式,其要点包括:

(1)字段之间以逗号分隔,数据行之间以\r\n分隔;

(2)字符串以半角双引号包围,字符串本身的双引号用两个双引号表示。

 

文件:test_csv.sql

Sql代码

 

  1. use test;         
  2. create table test_info (         id  integer not null,     
  3.     content varchar(64) not null,         primary key (id)     
  4. );         
  5. delete from test_info;         
  6. insert into test_info values (2010, 'hello, line     suped     
  7. seped     "     
  8. end'     );     
  9.     select * from test_info;     
  10.     select * from test_info into outfile '/tmp/test.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';     
  11.     delete from test_info;     
  12.     load data infile '/tmp/test.csv' into table test_info  fields terminated by ','  optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';     
  13.     select * from test_info;    

 

文件:test.csv

Text代码

 

  1. 2010,"hello, line     suped     
  2. seped     ""    
  3. end"   

在Linux下如果经常要进行这样的导入导出操作,当然最好与Shell脚本结合起来,为了避免每次都要写格式参数,可以把这个串保存在变量中,如下所示:(文件mysql.sh)

Bash代码

 

  1. #!/bin/sh         
  2.     # Copyright (c) 2010 codingstandards. All rights reserved.     
  3. # file: mysql.sh     # description: Bash中操作MySQL数据库     
  4. # license: LGPL     # author: codingstandards     
  5. # email: codingstandards@gmail.com     # version: 1.0    
  6. # date: 2010.02.28        
  7.     # MySQL中导入导出数据时,使用CSV格式时的命令行参数     
  8. # 在导出数据时使用:select ... from ... [where ...] into outfile '/tmp/data.csv' $MYSQL_CSV_FORMAT;     # 在导入数据时使用:load data infile '/tmp/data.csv' into table ... $MYSQL_CSV_FORMAT;     
  9. # CSV标准文档:RFC 4180    MYSQL_CSV_FORMAT="fields terminated by ',' optionally enclosed by '\"' escaped by '\"' lines terminated by '\r\n'"   

 

  1. #!/bin/sh   
  2.  # Copyright (c) 2010 codingstandards. All rights reserved.  
  3. # file: mysql.sh  # description: Bash中操作MySQL数据库  
  4. # license: LGPL  # author: codingstandards  
  5. # email: codingstandards@gmail.com  # version: 1.0 
  6. # date: 2010.02.28  
  7.  # MySQL中导入导出数据时,使用CSV格式时的命令行参数  
  8. # 在导出数据时使用:select ... from ... [where ...] into outfile '/tmp/data.csv' $MYSQL_CSV_FORMAT;  # 在导入数据时使用:load data infile '/tmp/data.csv' into table ... $MYSQL_CSV_FORMAT;  
  9. # CSV标准文档:RFC 4180 MYSQL_CSV_FORMAT="fields terminated by ',' optionally enclosed by '\"' escaped by '\"' lines terminated by '\r\n'" 

使用示例如下:(文件test_mysql_csv.sh)

Bash代码  
  1. #!/bin/sh         
  2. . /opt/shtools/commons/mysql.sh         
  3. # MYSQL_CSV_FORMAT="fields terminated by ',' optionally enclosed by '\"' escaped by '\"' lines terminated by '\r\n'"    echo "MYSQL_CSV_FORMAT=$MYSQL_CSV_FORMAT"    
  4.     rm /tmp/test.csv     
  5.     mysql -p --default-character-set=gbk -t --verbose test <<EOF     
  6.     use test;     
  7.     create table if not exists test_info (     
  8.     id  integer not null,         content varchar(64) not null,     
  9.     primary key (id)     );     
  10.     delete from test_info;     
  11.     insert into test_info values (2010, 'hello, line     
  12. suped     seped     
  13. "     end'     
  14. );         
  15. select * from test_info;         
  16. -- select * from test_info into outfile '/tmp/test.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';     select * from test_info into outfile '/tmp/test.csv' $MYSQL_CSV_FORMAT;     
  17.     delete from test_info;     
  18.     -- load data infile '/tmp/test.csv' into table test_info fields terminated by ','  optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';     
  19. load data infile '/tmp/test.csv' into table test_info $MYSQL_CSV_FORMAT;         
  20. select * from test_info;         
  21.     EOF     
  22.     echo "===== content in /tmp/test.csv ====="    
  23. cat /tmp/test.csv    
 

 

顶(1)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论