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