如果你需要向乙個表中新增許多條記錄,使用sql語句輸入資料是很不方便的。幸運的是,mysql提供了一些方法用於批量錄入資料,使得向表中新增資料變得容易了。
ad:
mysql資料庫在資料庫市場中雖然不是功能性最為強大的,但是mysql資料庫仍佔據著一定的地位,是很受歡迎的,本文中將為大家介紹mysql使用load語句批量錄入資料。
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_name
fields 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批量操作語句
1 replace into 批量更新 replace into t student id,dr values 1,2 2,3 x,y 例子 replace into t student id author createdtime updatedtime values 1,王五 2016 12 12...
PHP執行批量mysql語句
當有多條mysql語句連起來需要執行,比如 sqls insert table a values 1,2 insert table a values 2,3 需要執行的話php中可以使用的方法有三個 mysql query pdomysqli 三種方法當sqls語句沒有問題的時候都是可以的。但是第一...
MySQL批量更新語句
update mytable set myfield case id when 1then value when 2then value when 3then value endwhere id in 1,2,3 例如 update categories set display order case...