数据的复制、导入和导出记录
时间:2006-07-04 来源:LeeSharp
INSERT…SELECT:但注意的是INSERT语句中指定的字段列必须与SELECT子句返回的列匹配,否则会产生错误。
LOAD DATA INFILE:一次性插入多条记录。当需要相一个数据库输入大量得信息,但是结构化得数据与SQL语句得格式不相符时,这中方法就变得非常方便。
Eg:DEMO: DB NINECHARPTER TABLE BIRTH
LOAD DATA INFILE ‘PATH’ INTO TABLE TBL_NAME FIELDS TERMINATED BY ‘,(分隔符)’ LINES TERMINATED BY ‘\r\n’;
默认情况下,MySQL认为数据文件是在server上,在LOAD DATA INFILE指定的位置。如果想要使用client上的数据,可以在语句中添加LOCAL关键字,告诉MySQL在client的文件系统上查找文件。
Eg:LOAD DATA LOCAL INFILE ‘PATH’ INTO TABLE BIRTH FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\R\N’;
如果数据文件的字段比表的字段少,或者如果文件的值和表扎捏嘎的字段许类具有不同的顺序,可以通过在LOAD DATA INFILE命令后指定字段名来告诉MySQL如何把文件中的数据映射到表的字段。
一些关键字可以用来修改LOAD DATA INFILE命令的行为:
LOW_PRIORITY关键字导致在开始进行导入工作之前,服务器等待知道没有其他线程使用该表,另一方面,在进行导入工作时,CONCURRENT关键字允许客户在导入过程中从表读数据(但这个关键字只能应用于MyISAM表)
Eg:LOAD DATA LOW_PRIORITY INFILE ‘PATH’ INTO TABLE TBL_NAME;
LOAD DATA CONCURRENT LOCAL INFILE ‘PATH’ INTO TABLE TBL_NAME;
IGNORE关键字保证如果新记录的一个键与已存在的记录重复,则MySqL将跳到下一条(而不是退出整个操作,这是发生这种情况的默认行为)。或者可以选择用数据文件大额新记录代替已存在的记录。这可以通过使用关键字REPLACE代替IGNORE完成。
Eg:
mysql> load data infile 'k:/ebook/DB/MYSQL/MySQLPhraseBook/NineCharpter/AddressB
ook.txt' into table AddressBook fields terminated by ',' enclosed by '"' lines t
erminated by '\r\n' (phone,fname,lname,email);
ERROR 1062 (23000): Duplicate entry '112123' for key 1
mysql> load data infile 'k:/ebook/DB/MYSQL/MySQLPhraseBook/NineCharpter/AddressB
ook.txt' ignore into table AddressBook fields terminated by ',' enclosed by '"'
lines terminated by '\r\n' (phone,fname,lname,email);
Query OK, 0 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 3 Warnings: 0
mysql> load data infile 'k:/ebook/DB/MYSQL/MySQLPhraseBook/NineCharpter/AddressB
ook.txt' REPLACE into table AddressBook fields terminated by ',' enclosed by '"'
lines terminated by '\r\n' (phone,fname,lname,email);
Query OK, 6 rows affected (0.04 sec)
Records: 3 Deleted: 3 Skipped: 0 Warnings: 0
使用SELECT…INTO OUTFILE结构从一个表导出记录到一个文件。该结构可以完成常规SELECT语句做的所有事情,只不过把记录集送到一个文件中而已。