【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
相关推荐
TDengine (老段)3 分钟前
两分钟掌握 TDengine 全部写入方式
大数据·数据库·时序数据库·tdengine·涛思数据
码农君莫笑17 分钟前
《信管通低代码信息管理系统开发平台》Windows环境安装说明
服务器·数据库·windows·低代码·c#·bootstrap·.netcore
北欧人写代码29 分钟前
MySQL 数据库备份与恢复
mysql
计算机学长felix30 分钟前
基于SpringBoot的“大学生社团活动平台”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
木与子不厌39 分钟前
微服务自定义过滤器
运维·数据库·微服务
派可数据BI可视化1 小时前
连锁餐饮行业数据可视化分析方案
大数据·数据库·数据仓库·数据分析·商业智能bi
dbcat官方1 小时前
1.微服务灰度发布(方案设计)
java·数据库·分布式·微服务·中间件·架构
青年有志1 小时前
深入浅出 MyBatis | CRUD 操作、配置解析
数据库·tomcat·mybatis
数据的世界011 小时前
SQL创建和操纵表
数据库·sql
Echo flower1 小时前
mybatis-plus自动填充时间的配置类实现
java·数据库·mybatis