<span style="font-size:18px;">导出 mysql> INSERT INTO test_main -> SELECT 1, 'A' UNION ALL -> SELECT 2, 'B' UNION ALL -> SELECT 3, 'C'; Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> mysql> select id, value -> INTO OUTFILE 'f:/test_main.txt' -> FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '''' -> LINES TERMINATED BY '\n' -> FROM test_main; Query OK, 3 rows affected (0.01 sec) 导入 数据文件比目标表多字段 mysql> LOAD DATA INFILE 'f:/test_main.txt' -> INTO TABLE test_main6 -> FIELDS TERMINATED BY ',' -> OPTIONALLY ENCLOSED BY '''' -> (@dummy, value); Query OK, 3 rows affected (0.00 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 0 mysql> select * from test_main6; +-------+ | value | +-------+ | A | | B | | C | +-------+ 3 rows in set (0.00 sec) 这里的关键点, 在于那个 @dummy。 对你而言, 如果文件有 10列, 你只导 2 , 7 的话, 那就是 @dummy,列2,@dummy,@dummy,@dummy,@dummy,列7,@dummy,@dummy,@dummy</span>
第一部分, 是如何处理, 数据文件中, 列的数量, 大于 表的数量的情况。
假设数据文件如下: Book1.csv 编号,名称,说明 1,测试数据1,"测试CSV文件中,有逗号" 2,测试数据2,"测试CSV文件中有""双引号""" 3,测试数据3,"测试CSV文件中,有逗号和""双引号""" 4,测试数据4,普通数据 mysql> CREATE TABLE Test_Book1 ( -> id int, -> name VARCHAR(10), -> data VARCHAR(100) -> ); Query OK, 0 rows affected (0.05 sec) 下面的 lines terminated by '\r\n' 是 要求换行符号,为 windows的换行 下面的 ignore 1 lines是 忽略第一行的标题行。 mysql> LOAD DATA INFILE 'f:/Book1.csv' -> INTO TABLE Test_Book1 -> FIELDS TERMINATED BY ',' -> OPTIONALLY ENCLOSED BY '"' -> lines terminated by '\r\n' -> ignore 1 lines -> (id, name, data); Query OK, 4 rows affected (0.00 sec) Records: 4 Deleted: 0 Skipped: 0 Warnings: 0 mysql> select * from test_book1; +------+-----------+--------------------------------+ | id | name | data | +------+-----------+--------------------------------+ | 1 | 测试数据1 | 测试CSV文件中,有逗号 | | 2 | 测试数据2 | 测试CSV文件中有"双引号" | | 3 | 测试数据3 | 测试CSV文件中,有逗号和"双引号" | | 4 | 测试数据4 | 普通数据 | +------+-----------+--------------------------------+ 4 rows in set (0.00 sec) 对你而言, 你需要使用 ignore 1 lines 忽略第一行的标题行。
第二部分, 是说明, 如何 排除掉标题列的情况。
时间: 2024-10-11 06:17:34