【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
相关推荐
paopaokaka_luck10 分钟前
基于SpringBoot+Vue的非遗文化传承管理系统(websocket即时通讯、协同过滤算法、支付宝沙盒支付、可分享链接、功能量非常大)
java·数据库·vue.js·spring boot·后端·spring·小程序
小疯仔26 分钟前
navicat导出数据库的表结构
数据库
TOSUN同星27 分钟前
干货分享 | TSMaster DBC编辑器操作指南:功能详解+实战示例
数据库·oracle·编辑器·汽车·软件工程
huihui4502 小时前
一天一道Sql题(day01)
数据库
~尼卡~2 小时前
软考(软件设计师)数据库原理:事务管理,备份恢复,并发控制
数据库·软件设计师-软考
八九燕来2 小时前
Django双下划线查询
数据库·django·sqlite
眠りたいです2 小时前
Mysql常用内置函数,复合查询及内外连接
linux·数据库·c++·mysql
paopaokaka_luck3 小时前
智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
数据库·vue.js·spring boot·后端·websocket·小程序
M1A13 小时前
Java 面试系列第一弹:基础问题大盘点
java·后端·mysql
He.ZaoCha3 小时前
函数-1-字符串函数
数据库·sql·mysql