【MySQL】记录MySQL加载数据(LOAD DATA)

MySQL LOAD DATA

一、背景

现在有个需求是将用户信息存入student.data文件中,在现在load到数据库中

二、模拟生成用户信息

假设用户信息,包含姓名,性别,年龄,分数,创建时间,更新时间,逻辑删除等字段,现模拟数据生成,代码如下:

java 复制代码
// 方法用于写入数据到文件
    public static void writeDataToFile(String filePath, String name, String gender, int age, double score, LocalDateTime createdDate, LocalDateTime updatedDate, boolean isDeleted) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 使用三元运算符确保布尔值被转换为整数 (0 或 1)
        String data = String.format("%s,%s,%d,%.2f,%s,%s,%d",
                name, gender, age, score,
                createdDate.format(formatter),
                updatedDate.format(formatter),
                isDeleted ? 1 : 0);

        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true))) {
            writer.write(data);
            writer.newLine(); // 写入新行
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String filePath = "D:\\document\\test\\data\\student.data";

        // 示例数据
        writeDataToFile(filePath, "张三", "男", 20, 88.5, LocalDateTime.now(), LocalDateTime.now(), false);
        writeDataToFile(filePath, "李四", "女", 22, 92.0, LocalDateTime.now(), LocalDateTime.now(), false);
        writeDataToFile(filePath, "王五", "男", 21, 75.0, LocalDateTime.now(), LocalDateTime.now(), true);
    }

代码还是比较简单,没有什么难点,运行后生成的student.data数据如下图所示,有点类似于csv文件

三、加载到mysql表

3.1、建表语句

sql 复制代码
DROP TABLE IF EXISTS student_info;
CREATE TABLE student_info (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    gender VARCHAR(10) NOT NULL,
    age INT NOT NULL,
    score DECIMAL(5, 2) NOT NULL,
    created_date DATETIME NOT NULL,
    updated_date DATETIME NOT NULL,
    is_deleted TINYINT(1) NOT NULL DEFAULT 0
);

3.2 加载数据

sql 复制代码
LOAD DATA INFILE 'D:/document/test/data/log.data'
INTO TABLE student_info
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(name, gender, age, score, created_date, updated_date, is_deleted);

LOAD DATA INFILE 'D:/document/test/data/log.data' :指定要从哪个文件加载数据。这个文件路径是本地文件系统中的路径。

注意:确保 MySQL 服务器有权限访问此文件路径,并且路径的分隔符(如 \ 和 /)适合所使用的操作系统。

FIELDS TERMINATED BY ',':定义字段之间的分隔符。在这个例子中,字段是由逗号(,)分隔的。

ENCLOSED BY ' " ':定义字段值的引号字符。在这个例子中,字段值是由双引号(")括起来的。例如,如果字段值是 "value",则会包括引号。

LINES TERMINATED BY '\n' :定义每行数据的结束符。在这个例子中,每行数据以换行符(\n)结束。不同操作系统可能使用不同的行结束符(例如 Windows 使用 \r\n)。

(name, gender, age, score, created_date, updated_date, is_deleted):指定文件中每行数据的字段顺序,表明数据将被加载到表中的哪个列中。这里假设数据文件的每一行按照这个顺序排列。

注意:

如果加载数据时,报错:1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement,这说明mysql没有这个文件夹的读取权限,打开mysql的配置文件,windows下是my.ini

添加如下配置

yaml 复制代码
secure_file_priv="D:/document/test/data/"

3.3、查看结果

sql 复制代码
SELECT * from student_info
相关推荐
while(1){yan}6 小时前
Spring事务
java·数据库·spring boot·后端·java-ee·mybatis
盛世宏博北京6 小时前
高效环境管控:楼宇机房以太网温湿度精准监测系统方案
开发语言·数据库·php·以太网温湿度变送器
运维行者_6 小时前
2026 技术升级,OpManager 新增 AI 网络拓扑与带宽预测功能
运维·网络·数据库·人工智能·安全·web安全·自动化
gfdhy6 小时前
【C++实战】多态版商品库存管理系统:从设计到实现,吃透面向对象核心
开发语言·数据库·c++·microsoft·毕业设计·毕设
Elastic 中国社区官方博客6 小时前
Elasticsearch:上下文工程 vs. 提示词工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小唐同学爱学习6 小时前
如何解决海量数据存储
java·数据库·spring boot·mysql
wWYy.7 小时前
详解redis(15):缓存雪崩
数据库·redis·缓存
zzcufo7 小时前
多邻国第五阶段第13部分
java·开发语言·数据库
这周也會开心7 小时前
Redis相关知识点
数据库·redis·缓存
小白爱运维7 小时前
MySQL升级8.0.44后登录报错-系统表不支持'MyISAM'存储引擎
数据库·mysql