MySQL 学习笔记

MySQL是一个开源的关系型数据库,非常流行。

如无特殊说明,本专题文章的 SQL 均在 5.6 版本中验证。

👉文章列表
MySQL 学习笔记 ⏬ 创建和删除数据库 切换和查看数据库 创建和删除表 在表中增加、删除、修改列 添加和删除索引 增删查改 创建和删除主键 大小写和反引号 字符串类型值的大小写 SQL注释 CHAR类型 VARCHAR类型 整型数字 时间戳 不要使用utf8 唯一索引与NULL 唯一索引的单列长度限制 NULL的判等 DDL、DML、DCL的含义 查看表的状态 show table status InnoDB存储引擎的限制 if和case的使用 自定义函数 InnoDB 索引 事务 事务隔离级别的概念、查看和修改 读已提交(read committed)隔离级别下的锁 可重复读(repeatable read)隔离级别下的锁 修改自增主键id的类型 使用 load data 快速导入数据 使用 select into outfile 导出数据

MySQL: 使用 load data 快速导入数据


load data 的作用是将文件中的数据导入到 MySQL 数据库中。

[load data] 官方文档: https://dev.mysql.com/doc/refman/5.7/en/load-data.html

示例

建表

USE test;
CREATE TABLE `test_table` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL DEFAULT '' COMMENT '名字',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

生成数据

生成 2000w 条记录。

Python 代码:

// 文件名: gen_test_table_data.py

for i in range(1, 2000_0000):
    print('{},name{}'.format(i, i))

生成文件:

$ python3 gen_test_table_data.py > /tmp/data.csv 

/tmp/data.csv中的内容长这个样子:

1,name1
2,name2

配置 MySQL

默认情况下,MySQL 禁止导入/导出数据,可以通过配置secure_file_priv 解决。

找到 my.cnf(linux 下的位置是/etc/my.cnf),添加secure_file_priv=''。然后重启MySQL。

如果只允许处理 /tmp目录下的文件,可以配置成secure_file_priv='/tmp'

在mysql客户端中,可以通过select @@secure_file_priv; 或者show variables like '%secure%';查询配置的值。

导入数据

LOAD DATA INFILE '/tmp/data.csv' INTO TABLE test_table FIELDS TERMINATED BY ','

2000w条数据导入,在我的电脑上耗时约40秒。


( 本文完 )

文章目录