数据库表内导入txt
oracle数据库表内导入txt
首先准备TXT格式的文件,(可以从数据库导出)
1:准备ctl文件(导入字段映射以及字符集设置)
2:准备shell文件,执行导入命令(传入文件路径,ctl)
3: 调用shell,导入
mysql数据库表内导入txt
1:准备txt文件
将空值用\N代替,每行数据内的分隔符为\t,行与行之间换行符为\r\n。然后将txt文件存放到/var/lib/mysql-files路径下。
2:准备数据表
mysql> use testdb2;
mysql> create table tbl_pet (
-> name varchar(10),
-> owner varchar(10),
-> species varchar(10),
-> sex varchar(1),
-> birth date,
-> death date)CHARSET = utf8;
3:导入数据
mysql> LOAD DATA INFILE '/var/lib/mysql-files/pet.txt' INTO TABLE tbl_pet LINES TERMINATED BY '\r\n';
mysql> select * from tbl_pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+--------+---------+------+------------+------------+
8 rows in set (0.00 sec)
错误小结:
#Issue1:ERROR 1148 (42000): The used command is not allowed with this MySQL version
错误语句:mysql> LOAD DATA LOCAL INFILE ‘/var/lib/mysql/pet.txt’ INTO TABLE
tbl_pet;出错原因:多了一个LOCAL关键词。当文件在客户机端时要写LOCAL,在服务器端时不用写。我的txt文件是和MySQL数据库在同一虚拟机上的,所以不用加LOCAL。
#Issue2:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
出错原因:MySQL设置了secure-file-priv属性对应的路径,当数据文件从其他路径导入时便会报错。
解决办法:查看secure-file-priv指定路径并把数据文件放进去。参考https://blog.csdn.net/FallingU/article/details/75675220
mysql> show variables like '%secure%';
+--------------------------+-----------------------+
| Variable_name | Value |
+--------------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+--------------------------+-----------------------+
#Issue3:ERROR 1292 (22007): Incorrect date value: ‘’ for column ‘death’ at row 1
出错原因:一开始直接把原始表格里的数据复制到txt文件里没有处理,空值的地方是空的,不符合MySQL里空值的表示方式,所以报错。
解决办法:将空值用\N代替。参考https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html
#Issue4:使用 LOAD DATA INFILE ‘/var/lib/mysql-files/pet.txt’ INTO TABLE tbl_pet; 导入数据仍然失败
错误提示:’ for column ‘death’ at row 1 date value: 'N
出错原因:fields terminated by 默认值是’\t’,lines terminated by
默认值是’\n’,而Windows上的文件换行是’\r\n’,Mac OS X是’\r’。解决办法:加上LINES TERMINATED BY ‘\r\n’,如下:
mysql> LOAD DATA INFILE '/var/lib/mysql-files/pet.txt' INTO TABLE tbl_pet LINES TERMINATED BY '\r\n';
补充说明:
CHARACTER SET utf8:因为有中文数据,所以指定utf-8编码。
FIELDS TERMINATED BY ‘,’:csv文件以 ‘,’ 分隔数据。
IGNORE 1 LINES:跳过原始文件中的第一行表头数据。如果不写,表头也会被当作数据导入。如果要跳过从头开始的多行,可以改变LINES前面的数字。
要导入数据的字段放在最后,将字段顺序和原始文件里的顺序保持一致。
csv
https://blog.csdn.net/u013378642/article/details/81220809?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.edu_weight