mysql导入csv文件

时间:2025-03-11 19:07:42

docker-compose

version: '3.9'
services:
  db:
    image: mysql:5.7.38
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
    - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: your_password
    volumes:
    # 数据目录
    - ./datadir:/var/lib/mysql
    # 配置文件
    - ./:/etc/mysql//
  • 配置
[client]
default-character-set=utf8
[mysqld]
skip-host-cache
skip-name-resolve
# 这个选项可以使mysql加载任意路径文件
secure-file-priv = ""

否则会报错:

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

csv文件导入

文件路径对应关系

  • 数据目录/var/lib/mysql
  • 要导入的库表为
  • 则在/var/lib/mysql/test目录下mysql -uxxx -pxxx进入mysql命令行。

待导入数据格式

名字 ,班级 , 简介,分数
张三, 2班,  braa... , 97
....

建表SQL

create table student(
 id INT PRIMARY KEY AUTO_INCREMENT,
 name varchar(100), -- 名字
 class varchar(100),  -- ,班级
 description varchar(6000), --简介
 score INT(4), --分数
 status INT(4)
);

要讲四列全部导入到指定列使用LOAD DATA语句

load data infile '' into table student
FIELDS TERMINATED BY ','   -- csv字段分隔符
ENCLOSED BY '"'            
LINES TERMINATED BY '\n'   -- csv行分隔符
IGNORE 1 ROWS              -- 去除表头
(@col1,@col2,@col3,@col4)  -- @colN 代表csv文件的第N列的值
set name=@col1,class=@col2,description=@col3,score=@col4;  -- 每个列分别赋值