巧巧讀書
2010-03-05
論壇收藏此文
大中小
本章的前面討論如何使用sql向乙個表中插入資料。但是,如果你需要向乙個表中新增許多條記錄,使用sql語句輸入資料是很不方便的。幸運的是,mysql提供了一些方法用於批量錄入資料,使得向表中新增資料變得容易了。本節以及下一節,將介紹這些方法。本節將介紹sql語言級的解決方法。
1、基本語法
為了安全原因,當讀取位於伺服器上的文字檔案時,檔案必須處於資料庫目錄或可被所有人讀取。另外,為了對伺服器上檔案使用load data infile,在伺服器主機上你必須有file的許可權。見第七章 資料庫安全。
2、檔案的搜尋原則
當在伺服器主機上尋找檔案時,伺服器使用下列規則:
如果給出乙個絕對路徑名,伺服器使用該路徑名。
如果給出乙個有乙個或多個前置部件的相對路徑名,伺服器相對伺服器的資料目錄搜尋檔案。
如果給出乙個沒有前置部件的乙個檔名,伺服器在當前資料庫的資料庫目錄尋找檔案。
注意這些規則意味著乙個像「./myfile.txt」給出的檔案是從伺服器的資料目錄讀取,而作為「myfile.txt」給出的乙個檔案是從當前資料庫的資料庫目錄下讀取。也要注意,對於下列哪些語句,對db1檔案從資料庫目錄讀取,而不是db2:
mysql> use db1;mysql> load data infile "./data.txt" into table db2.my_table;
3、fields和lines子句的語法
如果你指定乙個fields子句,它的每乙個子句(terminated by, [optionally] enclosed by和escaped by)也是可選的,除了你必須至少指定他們之一。
如果你不指定乙個fields子句,預設值與如果你這樣寫的相同:
fields terminated by '\t' enclosed by '' escaped by '\\'
如果你不指定乙個lines子句,預設值與如果你這樣寫的相同:
lines terminated by '\n'
換句話說,預設值導致讀取輸入時,load data infile表現如下:
在換行符處尋找行邊界
在定位符處將行分進欄位
不要期望欄位由任何引號字元封裝
將由「\」開頭的定位符、換行符或「\」解釋是字段值的部分字面字元
load data infile能被用來讀取從外部**獲得的檔案。例如,以dbase格式的檔案將有由逗號分隔並用雙引號包圍的字段。如果檔案中的行由換行符終止,下面顯示的命令說明你將用來裝載檔案的字段和行處理選項:
mysql> load data infile 'data.txt' into table tbl_namefields terminated by ',' enclosed by '"'
lines terminated by '\n';
任何欄位或行處理選項可以指定乙個空字串('')。如果不是空,fields [optionally] enclosed by和fields escaped by值必須是乙個單個字元。fields terminated by和lines terminated by值可以是超過乙個字元。例如,寫入由回車換行符對(cr+lf)終止的行,或讀取包含這樣行的乙個檔案,指定乙個lines terminated by '\r\n'子句。
fields [optionally] enclosed by控制欄位的包圍字元。對於輸出(select ... into outfile),如果你省略optionally,所有的字段由enclosed by字元包圍。對於這樣的輸出的乙個例子(使用乙個逗號作為字段分隔符)顯示在下面:
"1","a string","100.20"
"2","a string containing a , comma","102.20"
"3","a string containing a \" quote","102.20"
"4","a string containing a \", quote and comma","102.20"
如果你指定optionally,enclosed by字元僅被用於包圍char和varchar欄位:
1,"a string",100.20
2,"a string containing a , comma",102.20
3,"a string containing a \" quote",102.20
4,"a string containing a \", quote and comma",102.20
注意,乙個字段值中的enclosed by字元的出現通過用escaped by字元作為其字首來轉義。也要注意,如果你指定乙個空escaped by值,可能產生不能被load data infile正確讀出的輸出。例如,如果轉義字元為空,上面顯示的輸出顯示如下。注意到在第四行的第二個字段包含跟隨引號的乙個逗號,它(錯誤地)好象要終止字段:
1,"a string",100.20
2,"a string containing a , comma",102.20
3,"a string containing a " quote",102.20
4,"a string containing a ", quote and comma",102.20
fields escaped by控制如何寫入或讀出特殊字元。如果fields escaped by字元不是空的,它被用於字首在輸出上的下列字元:
fields escaped by字元
fields [optionally] enclosed by字元
fields terminated by和lines terminated by值的第乙個字元
ascii 0(實際上將後續轉義字元寫成 ascii'0',而不是乙個零值位元組)
如果fields escaped by字元是空的,沒有字元被轉義。指定乙個空轉義字元可能不是乙個好主意,特別是如果在你資料中的字段值包含剛才給出的表中的任何字元。
對於輸入,如果fields escaped by字元不是空的,該字元的出現被剝去並且後續字元在字面上作為字段值的乙個部分。例外是乙個轉義的「0」或「n」(即,\0或\n,如果轉義字元是「\」)。這些序列被解釋為ascii 0(乙個零值位元組)和null。見下面關於null處理的規則。
總結
為資料庫裝載資料是管理員的重要職責之一,正因為重要,所以mysql提供的方法也是非常繁多。其中主要的在本節已經列舉:
1、使用insert、replace語句
2、使用insert/replace…select語句
3、使用load data infile語句
4、使用實用程式mysqlimport
mysql使用LOAD語句批量錄入資料
如果你需要向乙個表中新增許多條記錄,使用sql語句輸入資料是很不方便的。幸運的是,mysql提供了一些方法用於批量錄入資料,使得向表中新增資料變得容易了。ad mysql資料庫在資料庫市場中雖然不是功能性最為強大的,但是mysql資料庫仍佔據著一定的地位,是很受歡迎的,本文中將為大家介紹mysql使...
利用陣列實現資料庫記錄的批量錄入
包括兩個檔案 1。allneeddj.asp 實現表單的生成 2.allneeddjresult.asp 處理表單批量錄入 3.hbedu.mdb 資料庫檔案 其資料庫結構如下 provinceid 省份編號 數值型 dytaocount 打樣套數 數值型 taocount 紙樣套數 數值型 cpc...
利用WxPython 建立批量錄入框視窗
有個小專案,碰到需要批量建立輸入框的需求。研究了一下wxpython 實現了這個功能。coding utf 8 模組功能 顯示批量錄入框視窗。開發人員 seakingx 最後修改 2018.04.29 import wx class guiframe wx.frame self.max len in...