MYSQL使用LOAD DATA INFILE从csv导入数据

MAN*_*EET 99 mysql csv import load-data-infile

我将一些包含20000行的数据从CSV文件导入到Mysql中.

CSV中的列与MySQL表的列的顺序不同.如何自动分配与Mysql表列对应的列?

当我执行

LOAD DATA INFILE'abc.csv' INTO TABLE abc
Run Code Online (Sandbox Code Playgroud)

此查询将所有数据添加到第一列.

请建议将数据导入Mysql的自动语法.

Sah*_*hah 159

您可以使用LOAD DATA INFILE命令将csv文件导入表中.

检查此链接MySQL - LOAD DATA INFILE.

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);
Run Code Online (Sandbox Code Playgroud)

  • 注意:LINES TERMINATED BY'\ r \n'子句适用于Windows文件,但linux文件只能有'\n'. (26认同)
  • @KoushikDas它将忽略定义列名的第一行 (3认同)
  • 我可以知道 ```IGNORE 1 LINES``` 在这里到底是做什么的吗?提前致谢。 (2认同)
  • 重要的是要记住使用正斜杠:/sf/answers/3001464721/ (2认同)
  • 请注意,不需要(col1,col2,col3 ....)。如果要在使用此表插入数据之前快速创建表,则很有用。 (2认同)

Sun*_*S.M 48

在导入文件之前,您必须准备以下内容:

  • 将导入文件数据的数据库表.
  • CSV文件,其数据与表的列数和每列中的数据类型相匹配.
  • 该帐户连接到MySQL数据库服务器,具有FILE和INSERT权限.

假设我们有以下表格:

在此输入图像描述

使用以下查询创建表:

CREATE TABLE IF NOT EXISTS `survey` (
  `projectId` bigint(20) NOT NULL,
  `surveyId` bigint(20) NOT NULL,
  `views` bigint(20) NOT NULL,
  `dateTime` datetime NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

您的CSV文件必须正确格式化,例如看到附加图像:

在此输入图像描述

如果一切都很好..请执行以下查询从CSV文件加载数据:

注意:请添加CSV文件的绝对路径

LOAD DATA INFILE '/var/www/csv/data.csv' 
INTO TABLE survey 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
Run Code Online (Sandbox Code Playgroud)

如果一切都做了.您已成功将数据从CSV导出到表格

  • 很抱歉打扰这么旧的答案。这是非常有说服力的,但我怎么能跳过一些领域。假设我的表有 projectId、surveyId 和 dateTime,我如何跳过“views”字段? (2认同)

cki*_*kim 47

您可能需要设置FIELDS TERMINATED BY ','或者分隔符恰好是什么.

对于CSV文件,您的语句应如下所示:

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
Run Code Online (Sandbox Code Playgroud)

  • LOAD DATA LOCAL INFILE...如果没有 LOCAL,访问就会被拒绝。 (4认同)

Md.*_*din 15

句法:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL]
INFILE 'file_name' INTO TABLE `tbl_name`
CHARACTER SET [CHARACTER SET charset_name]
FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] 
[LINES[TERMINATED BY 'string']] 
[IGNORE number {LINES | ROWS}]
Run Code Online (Sandbox Code Playgroud)

看这个例子:

LOAD DATA LOCAL INFILE
'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer`
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
Run Code Online (Sandbox Code Playgroud)


kru*_*hal 6

在数据库中在1分钟内插入超过7000000条记录(超高速查询计算)

mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');
Run Code Online (Sandbox Code Playgroud)

RRP和RRP_nl和RRP_bl不在csv中,但是我们计算出来并在插入之后.