gpt4 book ai didi

mysql - 一个简单的mysql导入文件的例子+无法运行

转载 作者:行者123 更新时间:2023-11-29 03:25:40 25 4
gpt4 key购买 nike

我在将文件导入 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 mysql -u username -p --local-infile=1 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)

最佳答案

您需要在 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;

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

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

关于mysql - 一个简单的mysql导入文件的例子+无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36612169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com