MySQL添加CSV文件中的数据
此问题是前几天整理数据的时候碰到的,数据存在 CSV
文件中(200多万记录),通过python 往数据库中导入太慢了,后来使用MySQL
中自带的命令 LOAD DATA INFILE
, 30多秒就能够完成二三百万的数据量导入。
LOAD DATA INFILE
命令允许你读取文本文件然后非常快速的插入数据库。
导入文件之前,你需要准备以下的内容:
- 创建相应数据的数据库表格。
- CSV 文件中的数据需要和数据库表格在列数和数据类型保持一致。
- 具有写入数据库的文件和插入权限的账户
假定我们拥有一个discounts
的表格,结构如下:
我们使用 [CREATE TABLE statement][1]
命令创建 discounts
表格:
CREATE TABLE discounts ( id INT NOT NULL AUTO_INCREMENT, title VARCHAR(255) NOT NULL, expired_date DATE NOT NULL, amount DECIMAL(10 , 2 ) NULL, PRIMARY KEY (id) );
discounts.csv 文件的首行作为列名称,其他三行为数据。
以下的命令使得 c:\tmp\discounts.csv
的文件存入 discounts
表格。
LOAD DATA INFILE 'c:/tmp/discounts.csv' INTO TABLE discounts FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
文件中的数据阈由逗号分隔开,代码中反映为 FIELD TERMINATED BY ','
,而且数据由双引号包围,通过 ENCLOSED BY '" ‘
标明
CSV 中的换行标记由 LINES TERMINATED BY '\n'
进行说明。
因为文件第一行包含列名,所以,不应该导入数据表中,这里用 IGNORE 1 ROWS 语句忽略第一行,保证不导入。
导入数据转换格式
有时数据的格式并不满足数据库表格中目标列的格式。简单的情况下,你可以在LOAD DATA INFILE
中设置 set
选项 以转换数据
假定 discount_2.csv 文件中的过期时间列 是mm/dd/yyyy
的格式。
当向 discounts 表格中导入数据时,我们必须通过 str_to_date() function 转换成MySQL日期的格式
LOAD DATA INFILE 'c:/tmp/discounts_2.csv' INTO TABLE discounts FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS (title,@expired_date,amount) SET expired_date = STR_TO_DATE(@expired_date, '%m/%d/%Y');
客户端向远程MySQL数据库导入数据
使用命令 LOAD DATA INFILE
从客户端(本地电脑)向远程MySQL
数据库导入数据是完全可行的。
当你使用LOAD DATA INFILE
中的LOCAL
选项,客户端程序读取本地的文件,然后将其发送到MySQL server
。文件将被上传到服务器端相应的临时目录内,比如 Windows
中 C:\windows\temp
或 linux
中 /temp
。
此文件夹无法被MySQL配置或占用。
我们看看下面的例子:
LOAD DATA LOCAL INFILE 'c:/tmp/discounts.csv' INTO TABLE discounts FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS;
唯一的差别在于命令中的 LOCAL
选项。如果你需要load
一个大的CSV
文件,你会注意到LOCAL
选项,它会比平时慢一些,因为更多时间浪费在数据传输上面。
当你使用 LOCAL 选项时,连接 MySQL server的账户并不需要文件权限来导入数据。
使用 LOAD DATA LOCAL
导入本地文件到远程 MySQL
服务端,需要注意一些安全问题,你必须意识到这些问题以规避潜在的安全风险。
此文章转载自:https://www.cnblogs.com/nju2014/p/5456632.html
原文地址:https://www.cnblogs.com/wt869054461/p/11926051.html
- 如何用Python和深度神经网络识别图像?
- 余军:分布式数据库在金融行业的创新实践
- 微信小游戏采用了我们都忽略的产品推广新切入点
- ASP.NET MVC下的四种验证编程方式[续篇]
- 如何把业务问题变成机器学习的问题?
- 这算是ASP.NET MVC的一个大BUG吗?
- 【Scikit-Learn 中文文档】分解成分中的信号(矩阵分解问题) - 无监督学习 - 用户指南 | ApacheCN
- 区块链技术在非能源领域的应用场景
- Python读书笔记8
- How to debug .NET Core RC2 app with Visual Studio Code on Windows?
- 难道.NET Core到R2连中文编码都不支持吗?
- .NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序
- matplotlib的基本用法(四)——设置legend图例
- TensorFlow深度学习笔记 文本与序列的深度模型
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 第四章 Go语言中的控制语句
- 第六章 函数
- iPhone可以运行Android了
- 基于栈的内存分配 —— alloca
- 第七章 字符串
- lldb-入坑指北(1)-给xcode添加批量启用禁用断点功能
- 第八章 指针
- Django入门笔记——第二章、Django安装
- lldb 入坑指北(2)- 15行代码搞定二进制与源码映射
- lldb入坑指北(4)-打印任意函数的汇编代码
- ElasticSearch索引 VS MySQL索引
- Python随机打乱列表中的元素
- Python面试题汇总
- lldb 入坑指北(3) - 打印 c++ 实例的虚函数表
- 一文让你彻底搞懂`__str__`和`__repr__`?