【正文】
e and ma,FIELDS ESCAPED BY 控制如何寫入或讀出特殊字符。如果 FIELDS ESCAPED BY 字符不是空的,它被用于前綴在輸出上的下列字符: FIELDS ESCAPED BY 字符 FIELDS [OPTIONALLY] ENCLOSED BY 字符 FIELDS TERMINATED BY 和 LINES TERMINATED BY 值的第一個(gè)字符 ASCII 0(實(shí)際上將后續(xù)轉(zhuǎn)義字符寫成 ASCII39。039。,而不是一個(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)列舉: 使用 INSERT、REPLACE 語(yǔ)句 使用 INSERT/REPLACE…SELECT 語(yǔ)句 使用 LOAD DATA INFILE 語(yǔ)句 使用實(shí)用程序 mysqlimport(將在第五章介紹) 查詢數(shù)據(jù)表中的記錄除非最終檢索它們并利用它們來(lái)做點(diǎn)事情,否則將記錄放入數(shù)據(jù)庫(kù)沒(méi)什么好處。這就是 SELECT 語(yǔ)句的用途,即幫助取出數(shù)據(jù)。SELECT 大概是 SQL 語(yǔ)言中最常用的語(yǔ)句,而且怎樣使用它也最為講究;用它來(lái)選擇記錄可能相當(dāng)復(fù)雜,可能會(huì)涉及許多表中列之間的比較。本節(jié)介紹Select 語(yǔ)句關(guān)于查詢的最基本功能。SELECT 語(yǔ)句的語(yǔ)法如下:SELECT selection_list 選擇哪些列FROM table_list 從何處選擇行WHERE primary_constraint 行必須滿足什么條件GROUP BY grouping_columns 怎樣對(duì)結(jié)果分組HAVING secondary_constraint 行必須滿足的第二條件ORDER BY sorting_columns 怎樣對(duì)結(jié)果排序LIMIT count 結(jié)果限定注意:所有使用的關(guān)鍵詞必須精確地以上面的順序給出。例如,一個(gè) HAVING 子句必須跟在 GROUP BY 子句之后和 ORDER BY 子句之前。除了詞“SELECT”和說(shuō)明希望檢索什么的 column_list 部分外,語(yǔ)法中的每樣?xùn)|西都是可選的。有的數(shù)據(jù)庫(kù)還需要 FROM 子句。MySQL 有所不同,它允許對(duì)表達(dá)式求值而不引用任何表。 普通查詢? SELECT 最簡(jiǎn)單的形式是從一張表中檢索每樣?xùn)|西: mysql SELECT * FROM pet。其結(jié)果為:+++++++| name | owner | species | sex | birth | death |+++++++| Fluffy | Harold | cat | f | 19930204 | NULL || Claws | Gwen | cat | m | 19940317 | NULL || Buffy | Harold | dog | f | 19890513 | NULL || Chirpy | Gwen | bird | f | 19980911 | NULL || Fang | Benny | dog | m | 19900827 | NULL || Bowser | Diane | dog | m | 19900831 | 19950729 || Whistler | Gwen | bird | NULL | 19971209 | NULL || Slim | Benny | snake | m | 19960429 | NULL || Puffball | Diane | hamster | f | 19990330 | NULL |+++++++? 查詢特定行:你能從你的表中只選擇特定的行。例如,如果你想要驗(yàn)證你對(duì) Bowser 的出生日期所做的改變,像這樣精選 Bowser 的記錄: mysql SELECT * FROM pet WHERE name = Bowser。其結(jié)果為:+++++++| name | owner | species | sex | birth | death |+++++++| Bowser | Diane | dog | m | 19900831 | 19950729 |+++++++你可以對(duì)照前一個(gè)例子來(lái)驗(yàn)證。? 查詢特定列如果你不想要看到你的表的整個(gè)行,就命名你感興趣的列,用逗號(hào)分開(kāi)。例如,如果你想要知道你的動(dòng)物什么時(shí)候出生的,精選 name 和 birth 列: mysql SELECT name, birth FROM pet where owner=Gwen。其結(jié)果為:+++| name | birth |+++| Claws | 19940317 |67 / 30| Chirpy | 19980911 || Whistler | 19971209 |+++? 進(jìn)行表達(dá)式計(jì)算前面的多數(shù)查詢通過(guò)從表中檢索值已經(jīng)產(chǎn)生了輸出結(jié)果。MySQL 還允許作為一個(gè)公式的結(jié)果來(lái)計(jì)算輸出列的值。表達(dá)式可以簡(jiǎn)單也可以復(fù)雜。下面的查詢求一個(gè)簡(jiǎn)單表達(dá)式的值(常量)以及一個(gè)涉及幾個(gè)算術(shù)運(yùn)算符和兩個(gè)函數(shù)調(diào)用的較復(fù)雜的表達(dá)式的值。例如,計(jì)算 Browser 生活的天數(shù):mysql SELECT deathbirth FROM pet WHERE name=Bowser。其結(jié)果是:++| deathbirth |++| 49898 |++由于 MySQL 允許對(duì)表達(dá)式求值而不引用任何表。所以也可以這樣使用:mysqlselect (2+3*)/。其結(jié)果為:++| (2+3*)/ |++| |++ 條件查詢不必每次查詢都返回所有的行記錄,你能從你的表中只選擇特定的行。為此你需要使用WHERE 或者 HAVING 從句。 HAVING 從句與 WHERE 從句的區(qū)別是,HAVING 表達(dá)的是第二條件,在與其他從句配合使用,顯然不能在 WHERE 子句中的項(xiàng)目使用 HAVING。因此本小節(jié)緊介紹 WHERE 從句的使用, HAVING 從句的使用方法類似。另外 WHERE 從句也可以實(shí)現(xiàn) HAVING從句的絕大部分功能。為了限制 SELECT 語(yǔ)句檢索出來(lái)的記錄集,可使用 WHERE 子句,它給出選擇行的條件??赏ㄟ^(guò)查找滿足各種條件的列值來(lái)選擇行。WHERE 子句中的表達(dá)式可使用表 11 中的算術(shù)運(yùn)算符、表 12 的比較運(yùn)算符和表 13 的邏輯運(yùn)算符。還可以使用圓括號(hào)將一個(gè)表達(dá)式分成幾個(gè)部分。可使用常量、表列和函數(shù)來(lái)完成運(yùn)算。在本教程的查詢中,我們有時(shí)使用幾個(gè) MySQL 函數(shù),但是 MySQL 的函數(shù)遠(yuǎn)不止這里給出的這些。請(qǐng)參閱附錄 一,那里給出了所有 MySQL 函數(shù)的清單。表 31 算術(shù)運(yùn)算符運(yùn)算符 說(shuō)明 運(yùn)算符 說(shuō)明+ 加 * 乘 減 / 除表 32 比較運(yùn)算符運(yùn)算符 說(shuō)明 運(yùn)算符 說(shuō)明 小于 != 或 不等于= 小于或等于 = 大于或等于= 等于 大于表 33 邏輯運(yùn)算符運(yùn)算符 說(shuō)明NOT 或 ! 邏輯非OR 或 || 邏輯或AND 或 amp。amp。 邏輯與例如,如果你想要驗(yàn)證你對(duì) Bowser 的出生日期所做的改變,像這樣精選 Bowser 的記錄: mysql SELECT * FROM pet WHERE name = Bowser。+++++++| name | owner | species | sex | birth | death |+++++++| Bowser | Diane | dog | m | 19900831 | 19950729 |+++++++輸出證實(shí)出生年份現(xiàn)在正確記錄為 1990,而不是 1909。 字符串比較通常是大小些無(wú)關(guān)的,因此你可以指定名字為bowser、BOWSER等等,查詢結(jié)果將是相同的。 你能在任何列上指定條件,不只是 name。例如,如果你想要知道哪個(gè)動(dòng)物在 1998 以后出生的,測(cè)試 birth 列: mysql SELECT * FROM pet WHERE birth = 199811。+++++++| name | owner | species | sex | birth | death |+++++++| Chirpy | Gwen | bird | f | 19980911 | NULL || Puffball | Diane | hamster | f | 19990330 | NULL |+++++++你能組合條件,例如,找出雌性的狗: mysql SELECT * FROM pet WHERE species = dog AND sex = f。+++++++| name | owner | species | sex | birth | death |+++++++| Buffy | Harold | dog | f | 19890513 | NULL |+++++++69 / 30上面的查詢使用 AND 邏輯操作符,也有一個(gè) OR 操作符: mysql SELECT * FROM pet WHERE species = snake OR species = bird。+++++++| name | owner | species | sex | birth | death |+++++++| Chirpy | Gwen | bird | f | 19980911 | NULL || Whistler | Gwen | bird | NULL | 19971209 | NULL || Slim | Benny | snake | m | 19960429 | NULL |+++++++AND 和 OR 可以混用。如果你這樣做,使用括號(hào)指明條件應(yīng)該如何被分組是一個(gè)好主意: mysql SELECT * FROM pet WHERE (species = cat AND sex = m) OR (species = dog AND sex = f)。+++++++| name | owner | species | sex | birth | death |+++++++| Claws | Gwen | cat | m | 19940317 | NULL || Buffy | Harold | dog | f | 19890513 | NULL |+++++++ 查詢排序使用 ORDER BY 子句對(duì)查詢返回的結(jié)果按一列或多列排序。ORDER BY 子句的語(yǔ)法格式為: ORDER BY column_name [ASC|DESC] [,…] 其中 ASC 表示升序,為默認(rèn)值,DESC 為降序。ORDER BY 不能按 text、text 和 image 數(shù)據(jù)類型進(jìn)行排 序。另外,可以根據(jù)表達(dá)式進(jìn)行排序。例如,這里是動(dòng)物生日,按日期排序: mysql SELECT name, birth FROM pet ORDER BY birth。+++| name | birth |+++| Buffy | 19890513 || Fang | 19900827 || Bowser | 19900831 || Fluffy | 19930204 || Claws | 19940317 || Slim | 19960429 || Whistler | 19971209 || Chirpy | 19980911 || Puffball | 19990330 |+++為了以逆序排序,增加 DESC(下降 )關(guān)鍵字到你正在排序的列名上: mysql SELECT name, birth FROM pet ORDER BY birth DESC。+++| name | birth |+++| Puffball | 1999