将csv加载到mysql中选择列

时间:2015-08-13 13:47:55

标签: mysql csv load

我正在努力学习如何有效地使用mysql。现在,我想在一个mysql数据库中加载一个包含作者参考书目的csv。这是我生成数据库并尝试上传文件的代码:

USE stephenkingbooks;

DROP TABLE IF EXISTS stephenkingbooks;
CREATE TABLE stephenkingbooks
(
  `id`              int unsigned NOT NULL auto_increment,
  `original_title`  varchar(255) NOT NULL,
  `spanish_title`   varchar(255) NOT NULL,
  `year`            decimal(4) NOT NULL,
  `pages`           decimal(10) NOT NULL,
  `in_collection`   enum('Y','N') NOT NULL DEFAULT 'N',
  `read`            enum('Y','N') NOT NULL DEFAULT 'N',

  PRIMARY KEY     (id)
);

LOAD DATA LOCAL INFILE '../files/unprocessed_sking.csv'
INTO TABLE stephenkingbooks (column1, column2, column4, column3)
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;

csv文件的格式如下:

Carrie,Carrie,Terror,199,19745,"En 1976, el director de cine Brian de Palma hizo la primera película basada en la novela.7 3"

我的想法是只加载对应于original_title的两个第一列,第二列是西班牙语标题(在mysql和csv中相同),在csv中的column3之后是pages和column4 year

此外,对于年份栏目,我只想获取该字段的4个第一个数字,因为我有一些参考不属于年份。例如,Carrie于1974年被释放,但csv在我不想考虑的日期包括5个。

我的问题是我无法在我的终端中没有错误地获得我想要的东西......有什么建议吗?

1 个答案:

答案 0 :(得分:1)

  

13.2.6 LOAD DATA INFILE Syntax

     

...

     

如果中的字段顺序,您还必须指定列列表   输入文件与表中列的顺序不同。

     

...

尝试:

mysql> LOAD DATA INFILE '../files/unprocessed_sking.csv'
    -> INTO TABLE `stephenkingbooks`
    -> FIELDS TERMINATED BY ','
    -> ENCLOSED BY '"'
    -> LINES TERMINATED BY '\r\n'
    -> (`original_title`, `spanish_title`, @`genre`, @`pages`, @`year`)
    -> SET `year` = LEFT(@`year`, 4), `pages` = @`pages`;
Query OK, 1 row affected (0.00 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT
    -> `id`,
    -> `original_title`,
    -> `spanish_title`,
    -> `year`,
    -> `pages`,
    -> `in_collection`,
    -> `read`
    -> FROM `stephenkingbooks`;
+----+----------------+---------------+------+-------+---------------+------+
| id | original_title | spanish_title | year | pages | in_collection | read |
+----+----------------+---------------+------+-------+---------------+------+
|  1 | Carrie         | Carrie        | 1974 |   199 | N             | N    |
+----+----------------+---------------+------+-------+---------------+------+
1 row in set (0.00 sec)