学习 MySQL中导入导出CSV

  • A+
所属分类:其他杂项
本文信息本文由方法SEO顾问发表于2015-11-0615:56:03,共 2823 字,转载请注明:学习 MySQL中导入导出CSV_【方法SEO顾问】

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

Sql代码

  1. select * from test_info
  2. into outfile '/tmp/test.csv'
  3. fields terminated by ',' optionally enclosed by '"' escaped by '"'
  4. lines terminated by 'rn';

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

Sql代码 

  1. load data infile '/tmp/test.csv'
  2. into table test_info
  3. fields terminated by ',' optionally enclosed by '"' escaped by '"'
  4. lines terminated by 'rn';

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

Sql代码 

  1. fields terminated by ',' optionally enclosed by '"' escaped by '"'
  2. lines terminated by 'rn'

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

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

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

文件:test_csv.sql

Sql代码 

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

文件:test.csv

Text代码 

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

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

Bash代码 

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

使用示例如下:(文件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 'rn'"
  4. echo "MYSQL_CSV_FORMAT=$MYSQL_CSV_FORMAT"
  5. rm /tmp/test.csv
  6. mysql -p --default-character-set=gbk -t --verbose test <<EOF
  7. use test;
  8. create table if not exists test_info (
  9. id  integer not null,
  10. content varchar(64) not null,
  11. primary key (id)
  12. );
  13. delete from test_info;
  14. insert into test_info values (2010, 'hello, line
  15. suped
  16. seped
  17. "
  18. end'
  19. );
  20. select * from test_info;
  21. -- select * from test_info into outfile '/tmp/test.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by 'rn';
  22. select * from test_info into outfile '/tmp/test.csv' $MYSQL_CSV_FORMAT;
  23. delete from test_info;
  24. -- load data infile '/tmp/test.csv' into table test_info fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by 'rn';
  25. load data infile '/tmp/test.csv' into table test_info $MYSQL_CSV_FORMAT;
  26. select * from test_info;
  27. EOF
  28. echo "===== content in /tmp/test.csv ====="
  29. cat /tmp/test.csv
  • 版权声明:除非注明,本博客均为北京SEO方法的原创文章,转载或引用请以超链接形式标明本文地址,否则会在SEO圈内公开此种不尊重版权的行为,谢谢合作!本文地址:https://seofangfa.com/other-note/mysql-csv.html
  • 转载请注明:学习 MySQL中导入导出CSV_ 【方法SEO顾问】

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: