MySQL中使用LOAD命令快速导入数据(mysql 中load)
MySQL中使用LOAD命令快速导入数据
在数据库管理中,数据的导入是一项重要的工作,有时候手动导入数据会非常麻烦,而MySQL提供了LOAD命令来快速导入数据,生成一条条SQL实现快速导入的目的。
LOAD命令的基本语法
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE ‘filename’
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY ‘string’]
[[OPTIONALLY] ENCLOSED BY ‘char’]
[ESCAPED BY ‘char’]
]
[LINES
[STARTING BY ‘string’]
[TERMINATED BY ‘string’]
]
[IGNORE number LINES]
[(col_name_or_user_var,…)]
[SET col_name = expr,…]
其中,LOAD DATA是命令名称,LOW_PRIORITY表示限制LOAD的优先级,CONCURRENT表示追加数据时进行并发操作而不是一次性操作。LOCAL表示从客户端的文件系统中读取文件。REPLACE、IGNORE指定了具体的导入方式,REPLACE表示如果存在相同记录,则覆盖,否则插入,而IGNORE表示如果出现同名的记录,会忽略掉。INTO TABLE指定导入的目标表名。
在FIELDS和COLUMNS之后,分别是各个字段的分隔符和边界符。在LINES之后设置为行分隔符和行首字符。如果想跳过几行,可以使用IGNORE number LINES来忽略一定数量的行。
在设置了表和字段分隔符之后,可以通过(col_name_or_user_var,…)来指定应该将哪些列插入,可以使用SET col_name = expr语法来插入计算字段。
使用案例
假设我们有一个student表,有三个字段:id、name、age。并且我们有一个名为students.txt的文件,它包含了要插入到student表中的数据(tab分隔符):
1 Mary 20
2 John 21
3 Joe 19
我们可以使用以下命令来把students.txt数据导入到student表:
LOAD DATA LOCAL INFILE ‘students.txt’ INTO TABLE student
FIELDS TERMINATED BY ‘\t’ LINES TERMINATED BY ‘\n’
(id, name, age);
当然,如果students.txt的分隔符是逗号分隔符,那么应该使用FIELDS TERMINATED BY ‘,’。如果行分隔符是\r\n而不是\n,应该使用LINES TERMINATED BY ‘\r\n’。
使用LOAD命令时,需要将数据放在MySQL server machine的本地磁盘中。如果需要导入非常大的数据集,LOAD命令会变得非常慢,因为它会一行一行地插入,而使用LOAD LOCAL命令则可以直接跳过服务器磁盘上的所有数据,直接读取客户端本地磁盘上的数据,这样可以大大提高导入速度。
总结
LOAD命令是MySQL中一个非常有用的工具,可以快速地将数据导入到数据库中。它允许用户对具体的导入方式、目标表和字段进行指定,并且支持跳过行。在我们处理大量数据时,使用LOAD LOCAL可以大大缩短导入时间。