我有一个包含大量数据的 csv 文件,我想将其上传到 mysql 表中。但是,我想保留一列(主 ID)为空,以便我可以自己编辑它。在 mysql 的文档中,它说您可以指定列,但从我的研究来看,您似乎只能指定 csv 文件的列。
那么是否可以指定表的列
jyn*_*nus 15
检查这个例子:
# cat /tmp/db.txt
id,col1,col2
1,23,"dsafsdf"
2,-1,"ghfdhg"
7,9,"strsdrt"
# mysql test
mysql> CREATE TABLE `test` (
`id` int(11) NOT NULL,
`mycol1` int(11) DEFAULT NULL,
`mycol2` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`);
mysql> LOAD DATA INFILE '/tmp/db.txt'
INTO TABLE test FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
IGNORE 1 LINES (id, mycol1, mycol2);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM test;
+----+--------+---------+
| id | mycol1 | mycol2 |
+----+--------+---------+
| 1 | 23 | dsafsdf |
| 2 | -1 | ghfdhg |
| 7 | 9 | strsdrt |
+----+--------+---------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
如果要指定某些列:
mysql> TRUNCATE test;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM test;
Empty set (0.00 sec)
mysql> LOAD DATA INFILE '/tmp/db.txt'
INTO TABLE test FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
IGNORE 1 LINES (id, @ignore, mycol2);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM test;
+----+--------+---------+
| id | mycol1 | mycol2 |
+----+--------+---------+
| 1 | NULL | dsafsdf |
| 2 | NULL | ghfdhg |
| 7 | NULL | strsdrt |
+----+--------+---------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
你甚至可以用你自己的表达式设置它们:
mysql> TRUNCATE test;
Query OK, 0 rows affected (0.00 sec)
mysql> LOAD DATA INFILE '/tmp/db.txt'
INTO TABLE test FIELDS TERMINATED BY00 ','
OPTIONALLY ENCLOSED by '"' IGNORE 1 LINES (id, @var1, mycol2)
SET mycol1 = @var1 + 1;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
mysql> SELECT * FROM test;
+----+--------+---------+
| id | mycol1 | mycol2 |
+----+--------+---------+
| 1 | 24 | dsafsdf |
| 2 | 0 | ghfdhg |
| 7 | 10 | strsdrt |
+----+--------+---------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
但是,请理解主键不能为空也不能重复,因此您不能将其设置为 NULL,除非它获得默认值,例如,因为它是一个 auto_increment 列。