一个简单的导入文件的mysql示例+无法开始工作

时间:2016-04-14 01:12:59

标签: mysql

我很难将文件导入到文件中出现的mysql数据库中。所以我想我在这里用一个非常基本的例子问一个问题。任何人都可以帮助我实现这个目标吗?

我有以下文件:

$cat NIS.txt
00000,1284
00001,2081

现在我使用mysql - username -p进入mysql并创建一个表(请注意,必须先创建此表,然后才能使用LOAD DATA INFILE命令添加行)

CREATE TABLE IF NOT EXISTS nisC (
  id int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
  field1 int NOT NULL COMMENT 'field1',
  field2 int NOT NULL COMMENT 'field2',
  PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='datatable demo table' AUTO_INCREMENT=64 ;

然后我可以使用LOAD DATA LOCAL INFILE添加行 (注意LOCAL很重要,因为文件位于LOCAL目录中?)
LOAD DATA LOCAL INFILE 'NIS.txt' INTO TABLE nisC (field1, field2);

然而,这给了我警告

mysql> LOAD DATA LOCAL INFILE 'NIS.txt' INTO TABLE nisC (field1, field2);
Query OK, 2 rows affected, 4 warnings (0.00 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 4

当我选择时,表格看起来不正确:

mysql> select * from nisC;
+----+--------+--------+
| id | field1 | field2 |
+----+--------+--------+
|  1 |      0 |      0 |
|  2 |      1 |      0 |
+----+--------+--------+
2 rows in set (0.00 sec)

有人可以解释我做错了什么吗?为什么表中的值与文件中的值不同?

EDIT1 - 完整的解决方案/输出

注意:我必须像mysql -u username -p --local-infile=1一样登录mysql才能使LOAD DATA命令生效。

mysql> CREATE TABLE IF NOT EXISTS nisC (
    ->   id int(11) AUTO_INCREMENT COMMENT 'primary key',
    ->   field1 int NOT NULL COMMENT 'field1',
    ->   field2 int NOT NULL COMMENT 'field2',
    ->   PRIMARY KEY (id)
    -> ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='datatable demo table' AUTO_INCREMENT=64 ;
Query OK, 0 rows affected (0.01 sec)

mysql>
mysql>
mysql>
mysql> LOAD DATA LOCAL INFILE 'NIS.txt' INTO TABLE nisC
    -> FIELDS TERMINATED BY ','
    -> LINES TERMINATED BY '\n'
    -> (field1, field2)
    -> SET id = NULL;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

mysql>
mysql>
mysql> select * from nisC;
+----+--------+--------+
| id | field1 | field2 |
+----+--------+--------+
| 64 |      0 |   1284 |
| 65 |      1 |   2081 |
+----+--------+--------+
2 rows in set (0.00 sec)

1 个答案:

答案 0 :(得分:0)

您需要在LOAD DATA中设置分隔符,以便MySQL知道它正在读取CSV:

LOAD DATA LOCAL INFILE 'NIS.txt' INTO TABLE nisC
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(field1, field2)
SET id = NULL;

通过在field1命令中指定field2LOAD DATA,MySQL将使用CSV中的两列数据填充这两列。但是,您的表实际上有第三个id列。为了填充此内容,您可以指示LOAD DATA将其设置为NULL。这将诱使MySQL分配一个自动递增的值。 您应该更改id的列定义以使其可以为空。然后,当您在文件中读取时,MySQL将自动分配此ID。

id int(11) AUTO_INCREMENT COMMENT 'primary key',