自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

mysql使用LOAD語(yǔ)句批量錄入數(shù)據(jù)

數(shù)據(jù)庫(kù) MySQL
如果你需要向一個(gè)表中添加許多條記錄,使用SQL語(yǔ)句輸入數(shù)據(jù)是很不方便的。幸運(yùn)的是,MySQL提供了一些方法用于批量錄入數(shù)據(jù),使得向表中添加數(shù)據(jù)變得容易了。

mysql數(shù)據(jù)庫(kù)在數(shù)據(jù)庫(kù)市場(chǎng)中雖然不是功能性最為強(qiáng)大的,但是mysql數(shù)據(jù)庫(kù)仍占據(jù)著一定的地位,是很受歡迎的,本文中將為大家介紹mysql使用LOAD語(yǔ)句批量錄入數(shù)據(jù)。

1、基本語(yǔ)法

語(yǔ)法:LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name LOAD DATA INFILE語(yǔ)句從一個(gè)文本文件中以很高的速度讀入一個(gè)表中。如果指定LOCAL關(guān)鍵詞,從客戶主機(jī)讀文件。如果LOCAL沒(méi)指定,文件必須位于服務(wù)器上。(LOCAL在MySQL3.22.6或以后版本中可用。)

為了安全原因,當(dāng)讀取位于服務(wù)器上的文本文件時(shí),文件必須處于數(shù)據(jù)庫(kù)目錄或可被所有人讀取。另外,為了對(duì)服務(wù)器上文件使用LOAD DATA INFILE,在服務(wù)器主機(jī)上你必須有file的權(quán)限。見(jiàn)第七章 數(shù)據(jù)庫(kù)安全。

REPLACE和IGNORE關(guān)鍵詞控制對(duì)現(xiàn)有的唯一鍵記錄的重復(fù)的處理。如果你指定REPLACE,新行將代替有相同的唯一鍵值的現(xiàn)有行。如果你指定IGNORE,跳過(guò)有唯一鍵的現(xiàn)有行的重復(fù)行的輸入。如果你不指定任何一個(gè)選項(xiàng),當(dāng)找到重復(fù)鍵鍵時(shí),出現(xiàn)一個(gè)錯(cuò)誤,并且文本文件的余下部分被忽略時(shí)。

如果你使用LOCAL關(guān)鍵詞從一個(gè)本地文件裝載數(shù)據(jù),服務(wù)器沒(méi)有辦法在操作的當(dāng)中停止文件的傳輸,因此缺省的行為好像IGNORE被指定一樣。

2、文件的搜尋原則

當(dāng)在服務(wù)器主機(jī)上尋找文件時(shí),服務(wù)器使用下列規(guī)則:

如果給出一個(gè)絕對(duì)路徑名,服務(wù)器使用該路徑名。

如果給出一個(gè)有一個(gè)或多個(gè)前置部件的相對(duì)路徑名,服務(wù)器相對(duì)服務(wù)器的數(shù)據(jù)目錄搜索文件。

如果給出一個(gè)沒(méi)有前置部件的一個(gè)文件名,服務(wù)器在當(dāng)前數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)目錄尋找文件。

注意這些規(guī)則意味著一個(gè)像“./myfile.txt”給出的文件是從服務(wù)器的數(shù)據(jù)目錄讀取,而作為“myfile.txt”給出的一個(gè)文件是從當(dāng)前數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)目錄下讀取。也要注意,對(duì)于下列哪些語(yǔ)句,對(duì)db1文件從數(shù)據(jù)庫(kù)目錄讀取,而不是db2:

mysql> USE db1;
mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table;

3、FIELDS和LINES子句的語(yǔ)法

如果你指定一個(gè)FIELDS子句,它的每一個(gè)子句(TERMINATED BY, [OPTIONALLY] ENCLOSED BY和ESCAPED BY)也是可選的,除了你必須至少指定他們之一。

如果你不指定一個(gè)FIELDS子句,缺省值與如果你這樣寫(xiě)的相同:

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'

如果你不指定一個(gè)LINES子句,缺省值與如果你這樣寫(xiě)的相同:

LINES TERMINATED BY '\n'

換句話說(shuō),缺省值導(dǎo)致讀取輸入時(shí),LOAD DATA INFILE表現(xiàn)如下:

在換行符處尋找行邊界

在定位符處將行分進(jìn)字段

不要期望字段由任何引號(hào)字符封裝

將由“\”開(kāi)頭的定位符、換行符或“\”解釋是字段值的部分字面字符

LOAD DATA INFILE能被用來(lái)讀取從外部來(lái)源獲得的文件。例如,以dBASE格式的文件將有由逗號(hào)分隔并用雙引號(hào)包圍的字段。如果文件中的行由換行符終止,下面顯示的命令說(shuō)明你將用來(lái)裝載文件的字段和行處理選項(xiàng):

mysql> LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name

FIELDS TERMINATED BY ',' ENCLOSED BY '"'

LINES TERMINATED BY '\n';

任何字段或行處理選項(xiàng)可以指定一個(gè)空字符串('')。如果不是空,F(xiàn)IELDS [OPTIONALLY] ENCLOSED BY和FIELDS ESCAPED BY值必須是一個(gè)單個(gè)字符。FIELDS TERMINATED BY和LINES TERMINATED BY值可以是超過(guò)一個(gè)字符。例如,寫(xiě)入由回車換行符對(duì)(CR+LF)終止的行,或讀取包含這樣行的一個(gè)文件,指定一個(gè)LINES TERMINATED BY '\r\n'子句。

FIELDS [OPTIONALLY] ENCLOSED BY控制字段的包圍字符。對(duì)于輸出(SELECT ... INTO OUTFILE),如果你省略O(shè)PTIONALLY,所有的字段由ENCLOSED BY字符包圍。對(duì)于這樣的輸出的一個(gè)例子(使用一個(gè)逗號(hào)作為字段分隔符)顯示在下面:

"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

注意,一個(gè)字段值中的ENCLOSED BY字符的出現(xiàn)通過(guò)用ESCAPED BY字符作為其前綴來(lái)轉(zhuǎn)義。也要注意,如果你指定一個(gè)空ESCAPED BY值,可能產(chǎn)生不能被LOAD DATA INFILE正確讀出的輸出。例如,如果轉(zhuǎn)義字符為空,上面顯示的輸出顯示如下。注意到在第四行的第二個(gè)字段包含跟隨引號(hào)的一個(gè)逗號(hào),它(錯(cuò)誤地)好象要終止字段:

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控制如何寫(xiě)入或讀出特殊字符。如果FIELDS ESCAPED BY字符不是空的,它被用于前綴在輸出上的下列字符:

FIELDS ESCAPED BY字符

FIELDS [OPTIONALLY] ENCLOSED BY字符

FIELDS TERMINATED BY和LINES TERMINATED BY值的第一個(gè)字符

ASCII 0(實(shí)際上將后續(xù)轉(zhuǎn)義字符寫(xiě)成 ASCII'0',而不是一個(gè)零值字節(jié))

如果FIELDS ESCAPED BY字符是空的,沒(méi)有字符被轉(zhuǎn)義。指定一個(gè)空轉(zhuǎn)義字符可能不是一個(gè)好主意,特別是如果在你數(shù)據(jù)中的字段值包含剛才給出的表中的任何字符。

對(duì)于輸入,如果FIELDS ESCAPED BY字符不是空的,該字符的出現(xiàn)被剝?nèi)ゲ⑶液罄m(xù)字符在字面上作為字段值的一個(gè)部分。例外是一個(gè)轉(zhuǎn)義的“0”或“N”(即,\0或\N,如果轉(zhuǎn)義字符是“\”)。這些序列被解釋為ASCII 0(一個(gè)零值字節(jié))和NULL。見(jiàn)下面關(guān)于NULL處理的規(guī)則。

總結(jié)

為數(shù)據(jù)庫(kù)裝載數(shù)據(jù)是管理員的重要職責(zé)之一,正因?yàn)橹匾?,所以MySQL提供的方法也是非常繁多。其中主要的在本節(jié)已經(jīng)列舉:

1、使用INSERT、REPLACE語(yǔ)句

2、使用INSERT/REPLACE…SELECT語(yǔ)句

3、使用LOAD DATA INFILE語(yǔ)句

4、使用實(shí)用程序mysqlimport

關(guān)于mysql使用LOAD語(yǔ)句批量錄入數(shù)據(jù)的知識(shí)就為大家介紹到這,知識(shí)是在不斷更新的,如果大家有更好的方法,歡迎與大家分享。

【編輯推薦】

  1. 理清mysql外鏈的含義和命令
  2. MySQL數(shù)據(jù)庫(kù)中數(shù)據(jù)被刪除后的恢復(fù)
  3. MySQL數(shù)據(jù)庫(kù)中的安全解決方案

 

責(zé)任編輯:迎迎 來(lái)源: 中國(guó)站長(zhǎng)站綜合
相關(guān)推薦

2025-02-05 09:32:58

2010-10-12 13:55:41

MySQL EXPLA

2010-11-24 11:13:07

MySQL批量導(dǎo)入

2011-04-12 14:48:38

MySQL數(shù)據(jù)庫(kù)

2010-09-02 16:46:18

SQL刪除

2011-07-22 16:59:30

MySQL數(shù)據(jù)庫(kù)嵌套查詢

2021-06-28 10:25:47

MySQL語(yǔ)句接口

2021-06-28 10:00:32

JDBC數(shù)據(jù)庫(kù)MySQL

2010-09-25 14:59:54

SQL語(yǔ)句

2010-10-08 16:01:17

mysql UPDAT

2011-04-06 13:40:48

Delphi

2018-06-04 09:47:45

MES

2022-09-29 10:06:56

SQLMySQL服務(wù)端

2010-10-08 15:54:34

mysql中case

2010-10-08 16:10:58

MySQL creat

2016-12-15 09:17:30

easyui form數(shù)據(jù)方法

2022-04-10 19:55:09

OpenELB云原生

2010-10-08 16:49:01

MySQL alter

2021-04-08 10:55:53

MySQL數(shù)據(jù)庫(kù)代碼

2011-07-28 14:31:47

SQL Server數(shù)存儲(chǔ)過(guò)程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)