|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
要想在MySQL与其他数据库之间进行一个面面俱到的功能设置对比,并不是一件容易的MySQL学习教程。随着新软件版本的发布或一些补丁的推出。择要:为数据库装载数据是办理员的主要职责之一,正由于主要,以是MySQL供应的办法也长短常单一。个中次要利用INSERT和LOAD语句
利用INSERT语句拔出新数据
语法:INSERT[INTO]tbl_name[(col_name,...)]VALUES(PRession,...),…
INSERT[INTO]tbl_nameSETcol_name=expression,...
让我们入手下手使用INSERT语句来增添纪录,这是一个SQL语句,必要为它指定但愿拔出数据行的表或将值按行放进的表。INSERT语句具有几种情势:
可指定一切列的值:
比方:
shell>mysqlCurootCp
mysql>usemytest;
mysql>insertintoworkervalues(“tom”,”tom@yahoo.com”);
“INTO”一词自MySQL3.22.5以来是可选的。(这一点对其他情势的INSERT语句同样成立。)VALUES表必需包括表中每列的值,而且按表中列的寄存序次给出。(一样平常,这就是创立表时列的界说序次。假如不克不及一定的话,可以使用DESCRIBEtbl_name来检察这个序次。)
利用多个值表,能够一次供应多行数据。
Mysql>insertintoworkervalues(‘tom’,’tom@yahoo.com’),(‘paul’,’paul@yahoo.com’);
有多个值表的INSERT...VALUES的情势在MySQL3.22.5或今后版本中撑持。
能够给出要赋值的谁人列,然后再列出值。这关于但愿创建只要几个列必要初始设置的纪录是很有效的。
比方:
mysql>insertintoworker(name)values(‘tom’);
自MySQL3.22.5以来,这类情势的INSERT也同意多个值表:
mysql>insertintoworker(name)values(‘tom’),(‘paul’);
在列的列表中未给着名称的列都将付与缺省值。
自MySQL3.22.10以来,能够col_name=value的情势给出列和值。
比方:
mysql>insertintoworkersetname=’tom’;
在SET子句中未定名的行都付与一个缺省值。
利用这类情势的INSERT语句不克不及拔出多行。
一个expression能够援用在一个值表先前设置的任何列。比方,你能如许:
mysql>INSERTINTOtbl_name(col1,col2)VALUES(15,col1*2);
但不克不及如许:
mysql>INSERTINTOtbl_name(col1,col2)VALUES(col2*2,15);
利用INSERT…SELECT语句拔出从其他表选择的行
当我们在上一节进修创立表时,晓得可使用select从别的表来间接创立表,乃至能够同时复制数据纪录。假如你已具有了一个表,你一样能够从select语句的共同中获益。
从别的表中录进数据,比方:
mysql>insertintotbl_name1(col1,col2)selectcol3,col4fromtbl_name2;
你也能够略往目标表的列列表,假如你每列都无数据录进。
mysql>insertintotbl_name1selectcol3,col4fromtbl_name2;
INSERTINTO...SELECT语句满意以下前提:
查询不克不及包括一个ORDERBY子句。
INSERT语句的目标表不克不及呈现在SELECT查询部分的FROM子句,由于这在ANSISQL中被克制让从你正在拔出的表中SELECT。(成绩是SELECT将大概发明在统一个运转时代内先前被拔出的纪录。当利用子选择子句时,情形能很简单搅浑)
利用replace、replace…select语句拔出
REPLACE功效与INSERT完整一样,除假如在表中的一个老纪录具有在一个独一索引上的新纪录有不异的值,在新纪录被拔出之前,老纪录被删除。关于这类情形,insert语句的体现是发生一个毛病。
REPLACE语句也能够褐SELECT相共同,以是上两大节的内容完整合适REPALCE.。
应当注重的是,因为REPLACE语句大概改动原本的纪录,因而利用时要当心。
利用LOAD语句批量录进数据
本章的后面会商怎样利用SQL向一个表中拔出数据。可是,假如你必要向一个表中增加很多笔记录,利用SQL语句输出数据是很不便利的。侥幸的是,MySQL供应了一些办法用于批量录进数据,使得向表中增加数据变得简单了。本节和下一节,将先容这些办法。本节将先容SQL言语级的办理办法。
1、基础语法
语法:LOADDATA[LOCAL]INFILEfile_name.txt[REPLACE|IGNORE]INTOTABLEtbl_nameLOADDATAINFILE语句从一个文本文件中以很高的速率读进一个表中。假如指定LOCAL关头词,从客户主机读文件。假如LOCAL没指定,文件必需位于服务器上。(LOCAL在MySQL3.22.6或今后版本中可用。)
为了平安缘故原由,当读取位于服务器上的文本文件时,文件必需处于数据库目次或可被一切人读取。别的,为了对服务器上文件利用LOADDATAINFILE,在服务器主机上你必需有file的权限。见第七章数据库平安。
REPLACE和IGNORE关头词把持对现有的独一键纪录的反复的处置。假如你指定REPLACE,新即将取代有不异的独一键值的现有行。假如你指定IGNORE,跳过有独一键的现有行的反复行的输出。假如你不指定任何一个选项,当找到反复键键时,呈现一个毛病,而且文本文件的余下部分被疏忽时。
假如你利用LOCAL关头词从一个当地文件装载数据,服务器没有举措在操纵确当中中断文件的传输,因而缺省的举动仿佛IGNORE被指定一样。
2、文件的征采准绳
当在服务器主机上寻觅文件时,服务器利用以下划定规矩:
假如给出一个相对路径名,服务器利用该路径名。
假如给出一个有一个或多个前置部件的绝对路径名,服务器绝对服务器的数据目次搜刮文件。
假如给出一个没有前置部件的一个文件名,服务器在以后数据库的数据库目次寻觅文件。
注重这些划定规矩意味着一个像“./myfile.txt”给出的文件是从服务器的数据目次读取,而作为“myfile.txt”给出的一个文件是从以后数据库的数据库目次下读取。也要注重,关于以下哪些语句,对db1文件从数据库目次读取,而不是db2:
mysql>USEdb1;
mysql>LOADDATAINFILE"./data.txt"INTOTABLEdb2.my_table;
3、FIELDS和LINES子句的语法
假如你指定一个FIELDS子句,它的每个子句(TERMINATEDBY,[OPTIONALLY]ENCLOSEDBY和ESCAPEDBY)也是可选的,除你必需最少指定他们之一。
假如你不指定一个FIELDS子句,缺省值与假如你如许写的不异:
FIELDSTERMINATEDBY ENCLOSEDBYESCAPEDBY
假如你不指定一个LINES子句,缺省值与假如你如许写的不异:
LINESTERMINATEDBY
换句话说,缺省值招致读取输出时,LOADDATAINFILE体现以下:
在换行符处寻觅行界限
在定位符处将行分进字段
不要希冀字段由任何引号字符封装
将由“”开首的定位符、换行符或“”注释是字段值的部分字面字符
LOADDATAINFILE能被用来读取从内部来历取得的文件。比方,以dBASE格局的文件将有由逗号分开并用双引号包抄的字段。假如文件中的行由换行符停止,上面显现的命令申明你将用来装载文件的字段和行处置选项:
mysql>LOADDATAINFILEdata.txtINTOTABLEtbl_name
FIELDSTERMINATEDBY,ENCLOSEDBY"
LINESTERMINATEDBY
;
任何字段或行处置选项能够指定一个空字符串()。假如不是空,FIELDS[OPTIONALLY]ENCLOSEDBY和FIELDSESCAPEDBY值必需是一个单个字符。FIELDSTERMINATEDBY和LINESTERMINATEDBY值能够是凌驾一个字符。比方,写进由回车换行符对(CR+LF)停止的行,或读取包括如许行的一个文件,指定一个LINESTERMINATEDBY
子句。
FIELDS[OPTIONALLY]ENCLOSEDBY把持字段的包抄字符。关于输入(SELECT...INTOOUTFILE),假如你省略OPTIONALLY,一切的字段由ENCLOSEDBY字符包抄。关于如许的输入的一个例子(利用一个逗号作为字段分开符)显现鄙人面:
"1","astring","100.20"
"2","astringcontaininga,comma","102.20"
"3","astringcontaininga"quote","102.20"
"4","astringcontaininga",quoteandcomma","102.20"
假如你指定OPTIONALLY,ENCLOSEDBY字符仅被用于包抄CHAR和VARCHAR字段:
1,"astring",100.20
2,"astringcontaininga,comma",102.20
3,"astringcontaininga"quote",102.20
4,"astringcontaininga",quoteandcomma",102.20
注重,一个字段值中的ENCLOSEDBY字符的呈现经由过程用ESCAPEDBY字符作为其前缀来本义。也要注重,假如你指定一个空ESCAPEDBY值,大概发生不克不及被LOADDATAINFILE准确读出的输入。比方,假如本义字符为空,下面显现的输入显现以下。注重到在第四行的第二个字段包括跟从引号的一个逗号,它(毛病地)好象要停止字段:
1,"astring",100.20
2,"astringcontaininga,comma",102.20
3,"astringcontaininga"quote",102.20
4,"astringcontaininga",quoteandcomma",102.20
FIELDSESCAPEDBY把持怎样写进或读出特别字符。假如FIELDSESCAPEDBY字符不是空的,它被用于前缀在输入上的以下字符:
FIELDSESCAPEDBY字符
FIELDS[OPTIONALLY]ENCLOSEDBY字符
FIELDSTERMINATEDBY和LINESTERMINATEDBY值的第一个字符
ASCII0(实践大将后续本义字符写成ASCII0,而不是一个零值字节)
假如FIELDSESCAPEDBY字符是空的,没有字符被本义。指定一个空本义字符大概不是一个好主张,出格是假如在你数据中的字段值包括方才给出的表中的任何字符。
关于输出,假如FIELDSESCAPEDBY字符不是空的,该字符的呈现被剥往而且后续字符在字面上作为字段值的一个部分。破例是一个本义的“0”或“N”(即, 或N,假如本义字符是“”)。这些序列被注释为ASCII0(一个零值字节)和NULL。见上面关于NULL处置的划定规矩。
总结
为数据库装载数据是办理员的主要职责之一,正由于主要,以是MySQL供应的办法也长短常单一。个中次要的在本节已枚举:
1、利用INSERT、REPLACE语句
2、利用INSERT/REPLACE…SELECT语句
3、利用LOADDATAINFILE语句
4、利用有用程序mysqlimport
与其他数据库相比,MySQL易学易用。 |
|