關於數據庫中數據輸入問題
-------------------SELECT ... INTOOUTFILE 的 LOAD DATA INFILE 的逆操作問題.
一般我們都用insert into table_name values();來給數據表添加記錄.這是一種方法. 當然也可以使用MySQLimport實用程序裝載數據文件.其實它也是發送local data infile命令到服務器
而在輸入大量數據的時候 ,我們可以用load data infile 語法來實現.
之前,我們需要先編輯一個文本文件.錄入我們的數據.
load data infile的語法如下:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name
[FIELDS
[TERMINATED BY ' '] (' '為制表符)
[[OPTIONALLY] ENCLOSED BY ''] 說明不包括在任何字符裡面.
[ESCAPED BY '\' ] 表明無轉義字符
]
[LINES TERMINATED BY '
'] 這也是它的缺省狀態了
[IGNORE number LINES]
[(col_name,...)]
注:local關鍵字沒有被指定的時候 ,文件必須在服務器上.而local被指定時,則可以從客戶端讀取文件.(在 MySQL 3.23.49 和 MySQL 4.0.2 中,只有當你沒有以 --local-infile=0 選項啟動 mysqld,或你沒有禁止你的客戶端程序支持 LOCAL的情況下,LOCAL 才會工作,先於 MySQL 3.23.24 的版本,不能夠以 LOAD DATA INFILE 讀取)
如果是在服務上讀取的時候,則我們需要知道下面三個問題:
1,若以相對路徑的形式給出,如"./*.txt",則這個目錄是相對服務器的數據目錄.
2,若是"*.txt"則是從當前數據庫目錄下讀取的文件.
3,則是完整路徑.即絕對路徑了!
下面的fields子句,一開始錄入的時候,總是報錯.是因為我對fIElds可選項不清晰的理解問題, 其中的terminated by char 指定一個字符,標記分隔列.而enclosed
by char 則指示列值被什麼字符所包含.最後的escaped by char則表示用於轉義特殊字符的轉義符.我第一次錄入時,錯誤的原因是因為不清楚它們三個的缺省狀況.上面的語法部分列出的就是它們的缺省狀況.見上.
另外當你同時輸出文件與讀取記錄時,即用SELECT ... INTO OUTFILELOAD DATA INFILE 和 LOAD DATA INFILE 時,必須注意兩個命令的字段和行處理選項必須匹配.
可能會遇到的問題如下:
data truncation: data truncated for column 'id' at row 3
這種問題是在你沒有搞清MySQL數據類型的前提下會發生的一種情況,建議基礎不好的先看一下sql語言的數據類型.搞清之後就不會發生truncation(斷開)問題了。