我很难将文件导入到文件中出现的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)
有人可以解释我做错了什么吗?为什么表中的值与文件中的值不同?
注意:我必须像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)
答案 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
命令中指定field2
和LOAD DATA
,MySQL将使用CSV中的两列数据填充这两列。但是,您的表实际上有第三个id
列。为了填充此内容,您可以指示LOAD DATA
将其设置为NULL
。这将诱使MySQL分配一个自动递增的值。
您应该更改id
的列定义以使其可以为空。然后,当您在文件中读取时,MySQL将自动分配此ID。
id int(11) AUTO_INCREMENT COMMENT 'primary key',