从文件导入数据到MySQL数据库

  
  mysql 可执行文件 mysqlimport .exe 还有一个 mysql 命令中的 load data 两个 命令可以从文件中把格式化的数据导入数据库,如果有一个包含大数据量的文件,可以实现快速的数据导入。如果自定义程序读取文件,通过 insert 命令把数据一条条地插入数据库,这样的速度会非常慢,在我的 laptop 上如果单条地插入数据,每秒钟才插入约 50 条,那样的话,如果要插入 100000 条数据,需要 2000 秒,约 30 分钟,这样慢的速度你能够忍受吗?

     当然你可以使用每次插入多条数据的 insert 语句尝试,我试过,每插入 5000 条在我的 laptop 上用时仅 0.5 秒,这样插入 100000 条数据用时仅 20 秒,也不失为一个插入数据的好方法,但是一定要用 以下形式的 insert 语句

                           INSERT INTO `some_table` (column1,column2,...) values(data1,data2,...),(data3,data4)...;

 

(1)mysqlimport的用法如下:

                           mysqlimport [options] db_name textfile1 [textfile2 ...]

    其中db_name为要插入的数据库名字,textfile为要插入的格式化数据所在的文件,文件里的数据插入到文件名去掉后缀后剩余名字对应的表中

 

    比如:mysqlimport [省略选项] database_name some_table.txt

    会把some_table.txt中的数据插入到数据库名为database_name,表名为some_table的数据表中

 

    mysqlimport还有很多选项,下面按照使用的频率列出如下:

    --columns=第一列对应的数据表列名,第二列对应的数据表列名,…

定义被导入文件中的每一列对应的数据库表列名

    --fields-terminated-by=

数据域以什么结束,参数为字符串,默认为\t

    --fields-enclosed-by=

数据域用什么符号扩起来,默认为空,一般可以是双引号、括号等

    --fields-optionally-enclosed-by=

数据域可以用什么符号括起来,因为为只有部分数据用这些符号括起来

    --fields-escaped-by=

转义字符,参数为字符,默认为\

    --lines-terminated-by=

数据行以什么结束,参数为字符串,windows默认为\r\n

    --user=user_name -u user_name

    --password[=password] -p[password]

    --host=host_name -h hostname

    --port=port_num-P port_num

定义用户名、密码、mysql服务器ip用于连接的TCP/IP端口号,默认为mysql默认端口3306

    --ignore-lines=n

忽视数据文件的前n行,因为很多数据文件前面有表头

    --delete -D

在把文件中的数据插入前删除表中原先的数据

    --local -L

指定从客户端电脑读入数据文件,否则从服务器电脑读取

    --lock-tables -l

处理文本文件前锁定所有表以便写入,确保所有表在服务器上保持同步

    --protocol={TCP | SOCKET | PIPE | MEMORY}

使用的连接协议

    --force -f

忽视错误。例如,如果某个文本文件的表不存在,继续处理其它文件

不使用--force,如果表不存在则mysqlimport退出

    --compress -C

压缩在客户端和服务器之间发送的所有信息(如果二者均支持压缩)

    --silent,-s

沉默模式,只有出现错误时才输出

    --socket=path,-S path

当连接localhost时使用的套接字文件(为默认主机)

    --verbose,-v

冗长模式。打印出程序操作的详细信息。

   --version,-V

显示版本信息并退出。


(2)Load data的用法如下:

                     LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'

                           [REPLACE | IGNORE]

                           INTO TABLE tbl_name

                           [FIELDS      //字段

                                 [TERMINATED BY 'string']  //字段分割符

                                 [[OPTIONALLY] ENCLOSED BY 'char']   //括起字段的符号

                                 [ESCAPED BY 'char' ]       //字段中的转义符   

                            ]

                            [LINES

                                  [STARTING BY 'string']    //行的开始字符串      

                                  [TERMINATED BY 'string']  //末尾分割   

                            ]

                            [IGNORE number LINES]          //跳过前面number行

                            [(col_name_or_user_var,...)] //字段名称

                            [SET col_name = expr,...)]

 

    比如一个数据文本如下:

  股票代码       股票名称    开盘价    收盘价

Def:"000001","深发展A","13.24","13.56"

Def:"000002","万科A","24.43","24.77"

 

用两种方法导入mysql分别为:

mysqlimport --columns=stock_code,stock_name,opening,settlement --fields-terminated-by=, --fields-enclosed-by=" --fields-escaped-by=\ --lines-terminated-by=\r\n -uroot -ppasswd -hlocalhost -P3306 --ignore-lines=1 -L database_name table_name.txt

 

LOAD DATA LOCAL INFILE 'table_name.txt'

INTO TABLE database_name

FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\'

LINES STARTING BY 'Def'

IGNORE 1 LINES

(stock_code,stock_name,opening,settlement);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值