MySQL学习—快速导入数据
复习mysql 的建库、建表, 考虑后期将项目的数据逐渐迁入到服务器数据库,因此尝试着将数据传入到本地mysql数据库,期间碰到一坑;以下记录本次所碰到的坑。
此过程中需修改的配置文件my.in.
- 导入文件的路径问题
- 导入数据某些字段中存在空值报错问题
注意: mysql 需要很好的掌握my.in.
文件的配置,经常会用到
1. 导入数据的步骤
(1) 建表
按照正常的建表操作进行建表, CREATE TABLE 表名()
【此处不做过多的阐述, 详细知识点需复习】,例子:
CREATE TABLE tmll_taobao(
`年月` CHAR(20),
`淘宝月销额` INT DEFAULT NULL,
tao_goods INT,
`所有帖子数` INT DEFAULT NULL,
`所有转发数` INT,
`所有评论数` INT,
`转发1及以上帖子数` INT,
`重点品类` INT
);
(2)导入数据
导入数据采用 load data infiel
方式 ,因为此种方式写入速度快,易操作
参数说明:
into outfile ‘导出的目录和文件名’
指定导出的目录和文件名
fields terminated by ‘字段间分隔符’
定义字段间的分隔符
optionally enclosed by ‘字段包围符’
定义包围字段的字符(数值型字段无效)
lines terminated by ‘行间分隔符’
定义每行的分隔符
导入数据例子:
LOAD DATA INFILE 'C:/Users/lvdian/Desktop/tmall1.csv' INTO TABLE tmll_taobao -- 路径名用 / 斜杆【与windows不一样】
FIELDS TERMINATED BY ',' --分割符
OPTIONALLY ENCLOSED BY '"' --如果字段里有",需要加上
LINES TERMINATED BY '\r\n'-- 换行符
IGNORE 1 LINES; -- 忽略第一行的字段名
此处遇到问题了,报错 显示:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
查看服务器的secure_file_priv设置的路径:
SHOW GLOBAL VARIABLES LIKE '%secure_file_priv%';
原因~~是MYSQL 5.7 版本对于 数据安全考虑,查看官方文档,secure_file_priv参数用于限制LOAD DATA, SELECT …OUTFILE, LOAD_FILE()传到哪个指定目录。
- secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。
- secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能执行。
- secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。
填坑方法:修改my.in.
配置文件:
(1)找到配置文件my.in.
修改为 secure_file_priv=
(2)重启mysql
服务
重启服务后即可正常使用。
此过程中遇到的第2个问题是当excel中存在缺失值时,也会终止数据的导入:
解决办法:
修改 my.ini.
配置:参考博文
my.ini中查找sql-mode,
默认为sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",
将其修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION",重启mysql后即可
重启 服务器后即上传成功,速度超块。
说明:1. 可以上传txt、csv 格式的数据文件
- 尽量不要使用sql_yog、native 等工具上传数据,超慢。