MySql导入大数据

背景

客户发来csv格式的文件,里面包含了N多数据,需要将他们导入我们自己的数据库。数据库是MySql。值得注意的是:在数据特别大的时候用wps打开csv超出的数据是不会显示的,这里可以使用Snapde打开就不会有这种情况了。

执行导入

Navicat Premium 这个工具本身自带导入功能,这里不做赘述。因为我的需求是在linux操作,且没有开通shh所以一切只能靠命令存活。上代码~~~

此处避个雷,当数据量庞大且存在主键自增的时候,加上有主从数据库的时候,强烈强烈介意不要使用自增长,采用导入的主键。否则极大的可能造成死锁~一直处于executing…mysql的死锁机制,你懂得 特别是在没办法改变服务器配置的时候,你只能干等着(此处也是我的血泪教训,四五天了还卡在那)。

LOAD DATA INFILE 'C:/完整路径(这里不推荐使用中文路径以及中文名,容易出问题)'
INTO TABLE 表名
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
lines terminated by '\r\n'  #部分会不识别\r\n,可以换成\n
ignore 1 lines  #当第一行不是表头而是数据的时候可以省略这一句,这一句的意思是忽略第一行
(@1,name_, no_, time_, @2);#此处用的@1表示占位,意思是第一列忽略不插入(根据自己需求写)

还有需要注意的是,经常会出现编码问题,这里可以修改导入的文件的编码,大致流程就是用记事本打开然后另存为,在另存为的页面的左下角有一个格式编码,选择你需要的就行,我用的是utf8

当然,当数据量超级无敌大的时候记事本是打不开的,此处我用的方式是,是先建立一个utf8编码的数据库表,然后命令导入数据,再命令导出数据,虽然比较麻烦,但是确实是目前能想到的还不错的方式了,而且用本文章的导入导出所花费的时间也不至于太长。

我导入了2500多万条数据,大概花了170s相对我之前的笨操作来说可以说是很理想了。
在此记录一下,以防忘记~~~

导出

加更~补充一下我导出的优秀时刻,比导入的速度快哦而且超级简单,比工具导出的速度快了几百倍!!!啦啦啦

SELECT * FROM 表名 into  outfile 'C:/地址-推荐英文地址' FIELDS TERMINATED BY ',';

导出一个亿的数据只花了270s,万岁!!!
在此之前先导入了1亿多的数据,花了1100s,也算是比较理想了。

在这里为大家避个雷,导出时第一行不是表头,请千万记得不要自己用中文加一行(数据量比较大也不方便)可以直接将上面的脚本去掉忽略第一行的那句话,本人由于这个问题多加班三小时…暴走中…。

ignore 1 lines  #去掉这一句;

加更一波导出cvs数据导表头的写法

select * 
into  outfile 'C:/demo/demo.csv' FIELDS TERMINATED BY ','
lines terminated by '\n' from (select 'name','age','class'  union all select name_,age_,class_ from demo_ where age_>18  ) temp_table_;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值