理论
LOAD DATA INFILE语句用于高速的从文本文件读取行,并装入一个表中。文件名必须为一个文字字符串。
LOAD DATA [LOCAL] INFILE 'filename.txt'
INTO TABLE tb_name
[FIELDS
[TERMINTED BY 'string']
]
[LINES
[STARTING BY 'string']
[TERMINTED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
[LOCAL]
如果指定了LOCAL,则被认为与连接的客户端有关,文件会被客户主机上的客户端读取,并被发送到服务器。文件需指定一个完整的路径名称,以指定确切的位置。如果给定的是一个相对的路径名称,则此名称会被理解为相对于相对于启动客户端时所在的目录。
如果LOCAL没有被指定,则文件必须位于服务器主机上,并且被服务器直接读取。当在服务器上为文件定位时,如果给定了一个绝对的路径名称,则服务器使用此路径名称;如果给定了一个或多个带引导主键的相对路径名称,则服务器会搜索相对于服务器数据目录的文件;如果给定了一个不带引导组件的文件名称,则服务器会在默认数据库的数据目录(/mysql/data/dbname)中寻找文件。
注意:使用正斜杠(/)指定Windows路径名称,如果是反斜杠,则必须使用两个(\\)。
只有当服务器与客户端都许可时,LOCAL才可运行。如果使用--local-infile=0来启动mysqld,则LOCAL不运行。可在MySQL的配置文件中做好配置,如下所示:
[FIELDS]
如果你指定了一个FIELDS子句,则每个亚子句也是自选的,不过,必须指定其中至少一个。
[TERMINTED BY 'string']指定文件中字段间的分隔符,若不指定,则默认为‘\t’。
[LINES]
如果你指定了一个LINES子句,则每个亚子句也是自选的,不过,必须指定其中至少一个。
[STARTING BY 'string']指定每一行的起始符,若不指定,默认为空。
[TERMINTED BY 'string']指定每一行的终止符,如果是windows产生的文件,需指定终止符为‘\r\n’,若不指定,默认为‘\n’。
注意:FIELDS和LINES子句的语法对于两个语句是一样的。两个子句都是自选的,但是如果两个都被指定了,FIELDS必须位于LINES前。
[IGNORE number LINES]
这个选项用于在文件的开始处忽略行。
[(col_name_or_user_var,...)]
这里指定文件中各列的数据插入到数据库的对应字段。
[SET col_name = expr,...]
这个选项用于指定数据库每一列的值。
实例
LOAD DATA LOCAL INFILE ‘C:\\Users\\Administrator\\Desktop\\DS\\allorders\\20230221.txt’
INTO TABLE fbaorders CHARACTER SET utf8mb4
LINES
TERMINATED BY "\r\n"
IGNORE 1 LINES
(amazon_order_id, merchant_order_id, shipment_id, shipment_item_id, amazon_order_item_id, merchant_order_item_id, purchase_date, payments_date)
SET account=‘BTL’