LOAD DATA INFILE語句從一個文字檔中以很高的速度讀入一個表中。如果指定LOCAL關鍵詞,從客戶主機讀檔案。如果LOCAL沒指定,檔案必須位於伺服器上。(LOCAL在MySQL3.22.6或以後版本中可用。)
為了安全原因,當讀取位於伺服器上的文字檔時,檔案必須處於資料庫目錄或可被所有人讀取。另外,為了對伺服器上檔案使用LOAD DATA INFILE,在伺服器主機上你必須有file的許可權。
頭一回用load data infile,以為只是把插入語句寫到一個檔案裡,然後用load data infile把檔案傳入資料庫就OK了,於是產生了一個內容類別似同n句 insert into table_name (`id`,`name`,`content`) values (1,"a","abc"),(2,"b","abc"),(3,"c","abc");組成的.sql檔案。然後在PHP中執行 LOAD DATA INFILE 'file_name.sql' INTO TABLE table_name;發現總是執行出錯,真暈,不知道怎麼回事,只好去再詳細地讀一下mysql的應用手冊:
如果你指定一個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表現如下:
在分行符號處尋找行邊界
在定位器處將行分進欄位
不要期望欄位由任何引號字元封裝
將由“\”開頭的定位器、分行符號或“\”解釋是欄位值的部分字面字元
才知道原來我的sql裡的內容並不是按照 load data infile的預設設定來寫的, 例如預設設定下,每一句插入語句裡的欄位是由定位字元隔開且內容不以任何引號封裝(也就是括起來)的,但我的是由逗號隔開且有雙引號括起來的,難怪會執行出錯。
於是,將sql執行語句寫成mysql_query('load data local infile "file_name.sql" into table `table_name` FIELDS TERMINATED BY "," ENCLOSED BY \'"\' ESCAPED BY "\\\" LINES TERMINATED BY "\n" STARTING BY ""');
這會算是執行成功了,成功地往指定的資料表裡插入了很多條記錄,可是又發現了一個問題,插入的資料亂七八糟的,欄位與要插入的內容不符合我的要求,而且有好多是把欄位名給插入到欄位裡面去了,唉,只好再回頭去又讀了一遍mysql中的load data infile用法,終於搞明白了,原來file_name.sql裡面只需要按一定格式把內容寫進去就行了,不是把整個sql執行語句都寫進去的,真笨!^_^
於是,把內容換成了
1,"a","abc"
2,"b","abc"
3,"c","abc"
而且內容要與資料表裡的欄位從數量上和順序上都要嚴格對應
在本機伺服器(我用的是WINDOW主機)上測試了一下,OK,操作成功!
然後把程式傳到網路伺服器上(LINUX主機),一執行,提示:
Can't get stat of ……'' (Errcode: 13)
開始還以為是sql檔案許可權或者是mysql的root使用者權限的問題,後來想不對呀,mysql的root使用者是超級使用者,肯定有許可權的,那問題就出在sql檔案的許可權上,後來把sql的許可權改成777,執行操作後還是不行。
網上搜尋了一下,有說把檔案放在/var/lib/mysql裡就行了,一試,果真可以,可是我又不可能在PHP網頁中把sql檔案產生放到/var/lib/mysql下,費盡了心思,最後終於在網上搜尋到一個解決辦法:
使用LOCAL將比讓伺服器直接存取檔案慢些,因為檔案的內容必須從客戶主機傳送到伺服器主機。在另一方面,你不需要file許可權裝載本地檔案。
你也可以使用mysqlimport公用程式裝載資料檔案;它由發送一個LOAD DATA INFILE命令到伺服器來運作。 --local選項使得mysqlimport從客戶主機上讀取資料。如果客戶和伺服器支援壓縮協議,你能指定--compress在較慢的網路上獲得更好的效能。
其實辦法簡單得很,那就是把load data infile寫成load data local infile 就OK啦。
以下是內容補充:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]]
LOAD DATA INFILE 語句以很高的速度從一個文字檔中讀取行到一個表中。檔案名稱必須是一個文字字串。
關於INSERT 與LOAD DATA INFILE 的效率和提高LOAD DATA INFILE 速度的更多資訊,參考管理員手冊中的加速INSERT 語句 。
系統變數character_set_database 所指出的字元集被用來解釋檔案中的資訊。SET NAMES 和設定character_set_client 不會影響輸入的解釋。
使用者也可以使用import 公用程式裝載資料檔案;它通過發送一個LOAD DATA INFILE 命令到伺服器來實現。--local 選項使得import 從用戶端主機讀取資料檔案。如果用戶端與伺服器支援壓縮協議,使用者可以指定--compress 選項,以在較慢的網路中獲得更好的效能。參考管理員手冊中的import — 資料匯入程式 。
如果使用者指定關鍵詞LOW_PRIORITY,LOAD DATA 語句的執行將會被延遲,直到沒有其它的用戶端正在讀取表。
如果一個GSSYS 表滿足同時插入的條件(即該表在中間有空閑塊),並且您對這個GSSYS 表指定了CONCURRENT,則當LOAD DATA 正在執行時,其它線程會從表中重新擷取資料。即使沒有其它線程在同時使用本表格,使用本選項也會略微影響LOAD DATA 的效能。
如果指定了LOCAL 關鍵字,它將對串連的用戶端做出解釋:
• 如果指定了LOCAL,用戶端主機上的用戶端組件讀取檔案並發送到伺服器。可以給出檔案的完整路徑以確定其精確位置。如果給出的是相對路徑,則檔案名稱是相對於用戶端組件啟動時所在的目錄。
• 如果沒有指定LOCAL,檔案是位於伺服器的主機上,並且直接被伺服器讀取。
當從伺服器主機定位檔案時,伺服器使用下列規則:
• 如果給定完整的路徑,伺服器使用該路徑名。
• 如果給定一個或多個前置構件的相對路徑,伺服器以相對伺服器的資料目錄搜尋檔案。
• 如果給定沒有前置構件的檔案名稱,伺服器從當前資料庫的資料庫目錄搜尋檔案。
注意:
這些規則意味著,一個以'/gsfile.txt' 給出的檔案是從伺服器的資料目錄中讀取的,然而,以`gsfile.txt' 給出的一個檔案是從當前資料庫的資料目錄下讀取的。舉例來說,下面的LOAD DATA 語句從db1 資料庫目錄下讀取檔案'data.txt',因為db1 是當前資料庫,即使語句明確把檔案載入到db2資料庫中的表裡,也會從db1 目錄中讀取:
sqlcli> USE db1;
sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE db2.gs_table;
注意:
指定Windows 路徑名時,使用的是斜線而不是反斜線。如果要用反斜線,必須雙寫。
出於安全的原因,當讀取位於伺服器上的文字檔時,檔案必須位於資料庫目錄下或者可以被所有使用者讀取。也就是說,當對伺服器上的檔案執行LOAD DATA INFILE 時,使用者必須獲得FILE 許可權。
參考管理員手冊中的GBase 提供的許可權 。
與伺服器直接存取檔案相比,使用LOCAL 速度稍微慢些,這是因為檔案的內容必須通過用戶端到伺服器的串連傳送。另一方面,對於本地檔案,不需要獲得FILE 許可權。
只有伺服器和用戶端都允許時,LOCAL 才可以工作。例如,如果kernel 啟動時,--local-infile=0,則LOCAL 不能工作。參考管理員手冊中的LOAD DATA LOCAL 的安全問題 。
REPLACE 和IGNORE 關鍵字處理那些與已存在的主索引值重複的輸入記錄。
如果指定了REPLACE,輸入行將會代替已存在的行(也就是說,主索引值相同的行將作為存在的行)。參考REPLACE 文法 。
如果指定了IGNORE,與已存在行主索引值重複的輸入行將被跳過。如果不指定二者中的任一個,則操作行為將依賴是否指定了LOCAL 關鍵字。沒有指定LOCAL,則如果發現有重複的索引值,將產生一個錯誤,並忽略文字檔的其餘部分。如果指定了LOCAL,則預設的操作行為將與指定了IGNORE 的相同;這是因為,在操作過程中,伺服器沒有辦法終止檔案的傳送。
如果希望裝載操作中忽略外鍵約束,可以在執行LOAD DATA 之前執行SET FOREIGN_KEY_CHECKS=0 語句。
如果使用者在一個空的GsSYS 表上使用LOAD DATA INFILE,所有非唯一索引會以分批方式被建立(就像REPAIR)。當有許多索引時,這通常可以使LOAD DATA INFILE 更快一些。正常情況下非常快,但也有極端的情況,使用者可以通過在裝載檔案之前使用ALTER TABLE .. DISABLE KEYS 關閉它們和在裝載檔案之後使用ALTER TABLE .. ENABLE KEYS 重建索引,從而加速索引建立。參考管理員手冊中的加速INSERT 語句 。
LOAD DATA INFILE 是SELECT ... INTO OUTFILE 的反操作。參考SELECT 文法 。 使用SELECT ... INTO OUTFILE 將資料從一個資料庫寫到一個檔案中。使用LOAD DATA INFILE 讀取檔案到資料庫中。兩個命令的FIELDS 和LINES 子句的文法是一樣的。兩個子句都是可選的,但是如果兩個同時被指定,FIELDS 子句必須出現在LINES 子句之前。
如果使用者指定一個FIELDS 子句,它的子句 (TERMINATED BY、[OPTIONALLY] ENCLOSED BY 和ESCAPED BY) 也是可選的,不過,使用者必須至少指定它們中的一個。
如果使用者沒有指定一個FIELDS 子句,預設時如同使用下列語句:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
如果使用者沒有指定一個LINES 子句,預設時如同使用下列語句:
LINES TERMINATED BY '\n' STARTING BY ''
換句話說,當讀取輸入時,預設的LOAD DATA INFILE 表現如下:
• 在分行符號處尋找行的邊界。
• 不遺漏任何行首碼。
• 在定位字元處將行分離成欄位。
• 不認為欄位由任何引號字元封裝。
• 將有 “\” 開頭的定位器、分行符號或`\' 解釋為欄位值的一個文字字元。
相反的,當寫入輸出時,預設值導致SELECT ... INTO OUTFILE 表現如下:
• 在欄位值間加上定位字元。
• 不用任何引號字元封裝欄位。
• 使用 “\” 轉義出現在欄位值中的定位器、分行符號或`\' 字元執行個體。
• 在行的結尾處加上分行符號。
注意:
為了寫FIELDS ESCAPED BY '\\',使用者必須指定兩個反斜線,該值會作為一個反斜線被讀入。
注意:
如果是Windows 系統的文字檔,可能必須使用LINES TERMINATED BY '\r\n' 來讀取檔案,這是因為Windows 系統的特點是使用兩個字元作為行終止符。在某些程式中,在書寫檔案時,可能使用\r 作為行終止符,如寫字板。讀取這類檔案時,需要用LINES TERMINATED BY '\r'。
如果所有的將要讀取的行都有使用者希望忽略的首碼,可以使用LINES STARTING BY 'prefix_string' 來跳過此首碼(和在它前面的任何內容)。如果一個行沒有此首碼,則整個行都被跳過。注意,prefix_string 可能在行的中間!
例如:
sqlcli> LOAD DATA INFILE '/tmp/test.txt'
-> INTO TABLE test LINES STARTING BY "xxx";
用它讀取包含有下面內容的檔案:
xxx"Row",1
something xxx"Row",2
則可以得到資料(“row”,1)和(“row”,2)。
IGNORE number LINES 這個選項可以用來忽略檔案開頭部分的行。例如,可以用IGNORE 1 LINES 來跳過含有列名的的頭一行:
sqlcli> LOAD DATA INFILE '/tmp/test.txt'
-> INTO TABLE test IGNORE 1 LINES;
當使用者一前一後地使用SELECT ... INTO OUTFILE 和LOAD DATA INFILE 將資料從一個資料庫寫到一個檔案中,然後再從檔案中將它讀入資料庫中時,兩個命令的欄位和行處理選項必須匹配。否則,LOAD DATA INFILE 將不能正確地解釋檔案內容。假設使用者使用SELECT ... INTO OUTFILE 以逗號分隔欄位的方式將資料寫入到一個檔案中:
sqlcli> SELECT * INTO OUTFILE 'data.txt'
-> FIELDS TERMINATED BY ','
-> FROM table2;
為了將由逗號分隔的檔案讀回時,正確的語句應該是:
sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE table2
-> FIELDS TERMINATED BY ',';
如果使用者試圖用下面所示的語句讀取檔案,它將不會工作,因為命令LOAD DATA INFILE 以定位器區分欄位值:
sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE table2
-> FIELDS TERMINATED BY '\t';
可能的結果是每個輸入行將被解釋為一個單獨的欄位。
LOAD DATA INFILE 也可以被用來讀取外部源獲得的檔案。例如,dBASE 格式的檔案,欄位以逗號分隔並以雙引號包圍著。如果檔案中的行以一個分行符號終止,那麼下面所示的可以說明使用者將用來裝載檔案的欄位和行處理選項:
sqlcli> LOAD DATA INFILE 'data.txt' INTO TABLE tbl_name
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\n';
任何欄位和行處理選項都可以指定一個Null 字元串('')。如果不是空的,FIELDS [OPTIONALLY] ENCLOSED BY 和FIELDS ESCAPED BY 值必須是一個單個字元。FIELDS TERMINATED BY 和LINES TERMINATED BY 值可以超過一個字元。例如,為了寫入由斷行符號分行符號終止的行,或讀取包含這樣的行的檔案,應該指定一個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,BINARY,TEXT 或ENUM):
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
對於輸入,ENCLOSED BY 字元如果存在,它將從欄位值的尾部被剝離。(不管OPTIONALLY 是否被指定,都是這樣;對於輸入解釋,OPTIONALLY 不會影響它。)如果在ENCLOSED BY 字元前存在ESCAPED BY 字元,那麼它將被解釋為當前欄位值的一部分。
如果欄位以ENCLOSED 字元開始,只要後面緊跟著欄位或行TERMINATED BY 序列 ,這個字元執行個體就被認為用來終止一個欄位值。為了明確,如果在欄位中要使用ENCLOSED BY 字元,可以重複寫兩遍該字元,那麼它們會被解釋成單個ENCLOSED BY字元處理。例如,如果指定ENCLOSED BY '"',引號將做如下處理:
"The ""BIG"" boss" -> The "BIG" boss
The "BIG" boss -> The "BIG" boss
The ""BIG"" boss -> The ""BIG"" boss
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 字元為空白,那麼將沒有字元被轉義並且NULL 值仍輸出為NULL,而不是\N。指定一個空的逸出字元可能不是一個好的方法,特別是使用者的資料欄位值中包含剛才列表中的任何字元時。
對於輸入值,如果FIELDS ESCAPED BY 字元不是Null 字元,則出現這種字元時會被剝離,然後以下字元被作為欄位值的一部分。例外情況是,被轉義的‘0'或‘N'(例如,\0 或\N,此時轉義符為‘\')。這些序列被理解為ASCII NUL(一個零值位元組)和NULL。用於NULL 處理的規則在本節的後部進行說明。
關於更多的 “\” 轉義文法資訊,查看文字值 。
在某些情況下,欄位與行處理相互作用:
• 如果LINES TERMINATED BY 是一個Null 字元串,FIELDS TERMINATED BY 是非空的,則各行以FIELDS TERMINATED BY作為結尾。
• 如果FIELDS TERMINATED BY 和FIELDS ENCLOSED BY 值都是空的(''),那麼一個固定行(無定界符) 格式將被使用。用固定行格式時,在欄位之間不使用分隔字元(但是使用者仍然有一個行終結符)。列值的寫入和讀取使用列的“顯示”寬度。例如,如果一個列被定義 為INT(7),列的值將使用7 個字元的欄位被寫入。對於輸入,列值通過讀取7 個字元來獲得。
LINES TERMINATED BY 仍然用於分離行。如果一行沒有包含所有的欄位,那麼列的剩餘部分被設定為它們的預設值。如果使用者沒有一個行終結符,使用者應該設定它為''。在這種情況下,文字檔必須包含每行的所有的欄位。
固定行格式也影響對NULL 值的處理;見下面。注意,如果使用者正在使用一個多位元組的字元集,固定長度格式將不能工作。
NULL 值的處理有很多,取決於使用者所使用的FIELDS 和LINES 選項:
• 對於預設的FIELDS 和LINES 值,輸出時,NULL 被寫成\N,當讀入時,\N 被作為NULL 讀入(假設ESCAPED BY 字元為 “\”)。
• 如果FIELDS ENCLOSED BY 不是空值,則包含以文字詞語NULL 為值的欄位被作為NULL 值讀取。這與被FIELDS ENCLOSED BY 字元包圍的詞語NULL不同。該詞語被作為字串'NULL'讀取。
• 如果FIELDS ESCAPED BY 是空的,NULL 值被寫為詞NULL。
• 採用固定行格式時(當FIELDS TERMINATED BY 和FIELDS ENCLOSED BY 均為空白值時採用),NULL 被作為一個Null 字元串寫入。注意,這會導致在被寫入檔案時,表中的NULL 值和Null 字元串均無法辨別,這是因為兩者都被作為空白字串寫入。如果使用者需要在讀取檔案並返回時能夠分辨兩者,則使用者不應使用固定行格式。
一些不能被LOAD DATA INFILE 支援的情況:
• 固定尺寸的記錄行(FIELDS TERMINATED BY 和FIELDS ENCLOSED BY 均為空白)和BLOB 或TEXT 列。
• 如果使用者指定一個分隔字元與另一個相同,或是另一個的首碼,LOAD DATA INFILE 可能會不能正確地解釋輸入。例如,下列的FIELDS 子句將會產生問題:
FIELDS TERMINATED BY '"' ENCLOSED BY '"'
•
• 如果FIELDS ESCAPED BY 為空白,一個欄位值中包含有FIELDS ENCLOSED BY 或LINES TERMINATED BY 後面緊跟著FIELDS TERMINATED BY 的值時,將會引起LOAD DATA INFILE 過早地停止讀取一個欄位或一行。這是因為LOAD DATA INFILE 不知道欄位或行值在哪裡結束。
下面的例子將裝載persondata 表的所有列:
sqlcli> LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata;
預設情況下,當LOAD DATA INFILE 語句後沒有提供欄位列時,那麼LOAD DATA INFILE 認為輸入行包含表列中所有的欄位。如果使用者希望裝載表中的某些列,那指定一個欄位列表:
sqlcli> LOAD DATA INFILE 'persondata.txt'
-> INTO TABLE persondata (col1,col2,...);
如果輸入檔案的欄位順序不同於表中列的順序,使用者也必須指定一個欄位列表。否則GBase 不知道如何將輸入欄位與表中的列匹配。
Column 列表可以包含列名或者使用者變數,並且支援SET 子句。這使得能用輸入值給使用者變數賦值, 並在賦予列的結果之前對這些值進行變換。
SET 子句中的使用者變數有多種用途。下面的例子將資料檔案的第一列直接作為t1.column1 的值,並將第二列賦予一個使用者變數,此變數在作為t2.column2 的值之前進行一個除法操作
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, @var1)
SET column2 = @var1/100;
SET 子句可以提供不是來源於輸入檔案的值。下面的語句將column3 設定為當前的日期和時間:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, column2)
SET column3 = CURRENT_TIMESTAMP;
通過將一個輸入值賦予一個使用者變數,可以將此輸入值丟棄,並且不將此值賦予表的一個列:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, @dummy, column2, @dummy, column3);
使用列/變數列表和SET子句要受到一下限制:
• SET 子句中的賦值列名應當只能在賦值操作符的左邊。
• 在SET 指派陳述式中,可以使用子查詢。此查詢返回一個將被賦予列的值,它可能僅僅是一個標量查詢。不能用子查詢去查詢將被匯入的表。
• 對於列/變數列表或SET 子句,由於使用IGNORE 子句而被忽略的行就不會被處理。
• 由於使用者變數沒有顯示寬度,當匯入的資料是行固定格式時,將不能使用使用者變數。
當處理輸入行時,LOAD DATA 將行分為域,如果提供了列/變數列表和SET 子句,將按照它去使用這些值。然後得到的行就插入到表中。如果此表有BEFORE INSERT 或AFTER INSERT 觸發器,則插入行前後將分別啟用它們。
如果輸入的記錄行有太多的欄位,多餘的欄位將被忽略,並增加警告的數目。
如果一個輸入行的欄位較少,沒有輸入欄位的列將被設定為預設值。預設值賦值在CREATE TABLE 文法 中被描述。
一個空的欄位值不同於欄位值丟失的解釋:
• 對於字串類型,列被設定為空白字串。
• 對於數字類型,列被設定為0。
• 對於日期和時間類型,列被設定為適合列類型的“零”值。參考日期和時間類型 。
如果在一個INSERT 或UPDATE 語句中明確地將一個Null 字元串賦給一個字串、數字或日期或時間類型,使用者會得到與上面相同的結果。
只有在兩種情況下TIMESTAMP 列被設定為當前日期和時間。一種情況時當列有一個NULL 值(也就是\N)時;另一種情況是(僅對於第一個TIMESTAMP 列),當一個欄位清單被指定時,TIMESTAMP 列會從欄位清單中被略去。
LOAD DATA INFILE 認為所有的輸入均是字串,因而,對於ENUM 或SET 列,使用者不能以INSERT 語句的形式為其設定數字值。所有的ENUM 和SET 必須以字串指定!
當LOAD DATA INFILE 查詢結束時,它返回資訊字串,格式如下:
Records: 1 Deleted: 0 Skipped: 0 Warnings: 0