【文章內容簡介】
說明 event 和 score 表是由每個表中的 event_id 值的匹配連接起來的: where … event,event_id = 從多個表中檢索信息 ? 此查詢中的其他列( d a t e、 s c o r e、 t y p e)可單獨使用而不用表名限定符,因為它們在表中只出現一次,從而不會出現含混。但是,一般在連接中我們對每個列都進行限定以便清晰地表示出每個列是屬于哪個表。 ? Select , , , from event, score, student where = “19990823” and = and = 。 ? 名字顯示是利用 score 表和 student 表兩者都具有 student_id 列,使它們中的記錄可被連接這個事實來完成的。此查詢與前一個查詢的差別在于: ■ student 表被增加到了 FROM 子句中,因為除了 event 表和 score 表外還用到了它。 ■ student_id 列現在不明確了(因為現在有兩個引用到的表都含有此列),因此必須限定 為 或 以表明使用的是哪個表。 ■ WHERE 子句有一個附加項,它說明根據學生 ID 將 score 表記錄與 student 表記錄進行 匹配。 ■ 此查詢是顯示學生名而不是學生 I D。(當然,如果愿意的話,可以兩者都顯示。) 從多個表中檢索信息 ? LEFT JOIN ? 要求 MySQL 對從連接首先給出的表中選擇每行生成一個輸出行(即LEFT JOIN 關鍵字左邊給出的表) 刪除或更新現有記錄 有時,希望除去某些記錄或更改它們的內容。 DELETE 和 U P D ATE 語句令我們能做到這一點。 DELETE 語句有如下格式: DELETE FROM t b l _ n a m e WHERE 要刪除的記錄 WHERE 子句指定哪些記錄應該刪除。它是可選的,但是如果不選的話,將會刪除所有的記錄。這意味著最簡單的 DELETE 語句也是最危險的。這個查詢將清除表中的所有內容。一定要當心! Delete from tbl_name 為了刪除特定的記錄,可用 WHERE 子句來選擇所要刪除的記錄。這類似于SELECT 語句中的 WHERE 子句 Delete from president where state = “OH”。 DELETE 語句中的 WHERE 子句的一個限制是只能夠引用要刪除記錄的表中的列。 刪除或更新現有記錄 為了修改現有記錄,可利用 U P D ATE 語句,它具有下列格式: U P D ATE t b l_n a m e SET 要更改的列 WHERE 要更新的記錄 這里的 WHERE 子句正如 DELETE 語句一樣,是可選的,因此如果不指定的話,表中的每個記錄都被更新。 下面的查詢將每個學生的名字都更改為 “ Gee”: Update student set name=“Gee”。 下面的語句將更新 Jerome 的電子郵件和通信地址: Update member set =??, street=?123 elm?, city=?Anytown?, state=?NY?, zip=?01003? where last_name=?york? and first_name=?Jerome?。 正如 DELETE 語句一樣,對于 U P D AT E,用 SELECT 語句測試 WHERE 子句以確保選擇 正確的更新記錄是一個好辦法。如果選擇條件范圍太窄或太寬,就會使更新的記錄太少或太多。 改變表的結構 ? 要用 A LTER TA B L E,可以對表重新命名,增加或刪除列,更改列的類型等等 ? Alter table member add member_id int unsigned not null auto_increment primary key。 與 mysql 交互的技巧 ? 在激活 mysql 時,有可能需要指定諸如主機名、用戶名或口令這樣的連接參數。運行一個程序需要做很多輸入工作,這很快就會讓人厭煩。有幾種方法可最小化所做的鍵入工作,使連接更為容易,它們分別為: ? ■ 利用選項文件存儲連接參數。 ? ■ 利用外殼程序的命令歷史重復命令。 ? ■ 利用外殼程序的別名或腳本定義 mysql 命令行快捷鍵。 與 mysql 交互的技巧 ? 利用選項文件 ? 自版本 以來, MySQL 允許在一個選項文件中存儲連接參數。然后在運行mysql 時就不用重復鍵入這些參數了;僅當您曾經在命令行上鍵入過它們時可以使用。這些參數也可以為其他 MySQL 客戶機所用,如為 mysqlimport 所用。這也表示在使用這些程序時,選項文件減少了鍵入工作。為了利用選項文件方法指定連接參數,可建立一個名為 ~ / . m (即主目錄中的一個名為 . m 的文件)。選項文件是一個無格式的文本文件,因此可用任何文本編輯器來創(chuàng)建它。文件的內容所下所示 : ? [client] host=serverhost user=yourname password=yourpass ? [client] 行標記客戶機選項組的開始;它后跟的所有行都是為 MySQL 客戶機程序獲得選項值準備的,這些行一直沿續(xù)到文件的結尾或另一不同的參數組的開始。在連接到服務器時,用指定的主機名、用戶名和口令替換 serverhost、 yourname 和yourpass。只有 [client] 行是必須的。定義參數值的行都是可選的;可以僅指定那些所需要的參數。并設置訪問權限。 與 mysql 交互的技巧 ? 在 Windows 下,選項文件的內容是相同的,但其名稱不同( c : \ m y. c n f),而且不調用 chmod 命令。 ? 利用外殼程序的命令歷史 諸如 c s h、 tcsh 和 bash 這樣的外殼程序會在一個歷史列表中記下您的命令,并允許重復該列表中的命令。如果采用的是這樣的外殼程序,其歷史列表可幫助免除完整命令的鍵入。例如,如果最近調用了 m y s q l,可按如下命令再次執(zhí)行它: ? % !my ? 其中 “ ! ” 告訴外殼程序搜索整個命令歷史找到最近以 “ m y”開頭的命令,并像您打入的一樣發(fā)布它。有的外殼程序還允許利用上箭頭和下箭頭鍵(或許是 CtrlP 和 C t r l N)在歷史列表中上下移動。可用這種方法選擇想要的命令,然后按 Enter 執(zhí)行它。 tcsh 和 bash 有這種功能,而其他外殼程序也可能有 與 mysql 交互的技巧 ? 利用外殼程序的別名或腳本,如果使用的外殼程序提供別名功能,那么可以設置允許通過鍵入簡短名調用長命令的命令快捷鍵。例如,在csh 或 tcsh 中,可利用 alias 命令設置名為samp_db 的別名,如下所示: ? Alias samp_db ?mysql –h localhost –u root –p samp_db? ? 而 bash 中的語法稍有不同: ? Alias samp_db=?mysql –h localhost –u root –p samp_db? 與 mysql 交互的技巧 以較少的鍵入發(fā)布查詢 mysql 是一個與數據庫進行交互的極為有用的程序,但是其界面最適合于簡短的、單行的查詢。當然, mysql 自身并不關心某個查詢是否分成多行,但是長的查詢很不好鍵入。輸入一條查詢也不是很有趣的事,即使是一條較短的查詢也是如此,除非發(fā)現有錯誤才愿意重新鍵入它。有幾種可用來避免不必要的鍵入或重新鍵入的技巧: ■ 利用 mysql 的輸入行編輯功能。 ■ 利用拷貝和粘貼。 ■ 以批方式運行 m y s q l。 ■ 利用現有數據來創(chuàng)建新記錄以避免鍵入 I N S E RT 語句。 與 mysql 交互的技巧 ? 利用 mysql 的輸入行編輯器 ? mysql 具有內建的 GNU Readline 庫,允許對輸入行進行編輯。可以對當前錄入的行進行處理,或調出以前輸入的行并重新執(zhí)行它們(原樣執(zhí)行或做進一步的修改后執(zhí)行)。在錄入一行并發(fā)現錯誤時,這是非常方便的;您可以在按Enter 鍵前,在行內退格并進行修正。如果錄入了一個有錯的查詢,那么可以調用該查詢并對其進行編輯以解決問題,然后再重新提交它。(如果您在一行上鍵入了整個查詢,這是最容易的方法。) 與 mysql 交互的技巧 用 MySQL 處理數據 M y S Q L在處理這些數據類型時所出現的問題,主要內容如下: ■ 通用數據類型,包括 NULL 值。 ■ 特殊數據類型,以及描述每種列類型的屬性。有些列類型是相當常見的,如 CHAR 串類型。而有的如 A U TO_INCREMENT 整型和 T I M E S TAMP 日期類型,其性能很特殊,應該加以理解以免出錯。 ■ 恰當地選擇表的列類型。在創(chuàng)建表時,重要的是要了解怎樣為自己的目的選擇最好的類型,以及在幾種類型都可以用于想要存儲的值時選擇一種類型。 ■ 表達式求值規(guī)則。 MySQL 提供了許多可用于表達式的運算符和函數,以便對數據進行檢索、顯示和處理。表達式求值的規(guī)則包括類型轉換規(guī)則,在一種類型的值用于另一類型的值的情況時需用到類型轉換規(guī)則。 用 MySQL 處理數據 ? 數值值 ? 數值是諸如 48 或 這樣的值。 MySQL 支持說明為整數(無小數部分)或浮點數(有小數部分)的值。整數可按十進制形式或十六進制形式表示。整數由數字序列組成。以十六進制形式表示的整數由 “ 0 x”后跟一個或多個十六進制數字( ” 0”到 “ 9”及 “ a”到 “ f”)組成。例如, 0x0a 為十進制的 1 0,而 0 x ffff 為十進制的 6 5 5 3 5。十六進制數字不區(qū)分大小寫,但其前綴 “ 0 x”不能為 “ 0 X”。即 0x0a 和 0x0A 都是合法的,但0X0a 和 0X0A 不是合法的。 ? 浮點數由一個阿拉伯數字序列、一個小數點和另一個阿拉伯數字序列組成。兩個阿拉伯數字序列可以分別為空,但不能同時為空。 ? MySQL 支持科學表示法。科學表示法由整數或浮點數后跟 “ e”或 “ E”、一個符號( “ +”或 “ ”)和一個整數指數來表示。 +12 和 都是合法的科學表示法表示的數。而 不是合法的,因為指數前的符號未給出。指數前的 “ e”也是一個合法的十六進制數字,因此有可能會弄錯。 ? 數值前可放一個負號 “ ”以表示負值。 用 MySQL 處理數據 ? (字符)串值 ? 串是諸如 “ Madison, Wi s c o n s i n”或 “ patient shows improvement”這樣的值。既可用單引號也可用雙引號將串值括起來。串中可使用幾個轉義序列,它們用來表示特殊的字符,見表。每個序列以一個反斜杠( “ \”)開始,指出臨時不同于通常的字符解釋。注意 NUL 字節(jié)與 NULL 值不同; NUL 為一個零值字節(jié),而 NULL 為沒有值。 用 MySQL 處理數據 ? 要在串中包括一個引號,可有如下三種選擇: ? ■ 如果串是用相同的引號括起來的,那么在串中需要引號的地方雙寫引號即可。如: ?I can ? ?t?。 “He said, “” I told you so.”””。 ? ■ 如果串是用另外的引號括起來的,則不需要雙寫相應引號。如: “I can?t” 。 ?He said, “I told you so.” ?。 ? ■ 用反斜杠方式表示;這種方法不去管用來將串括起的是單引號還是雙引號。如: ?I can\?t?。 “I cant\? t” ? 在串的環(huán)境中,可用十六進制常數來指定串值。其語法與前面描述的數值值相同,但是每對十六進制的數字都被看作 ASCII 代碼并轉換為字符,其結果用于串。例如, 0 x 6 1 6 2 6 3作為串時為 “ a b c”。 用 MySQL 處理數據 ? 日期和時間值 ? 日期和時間是一些諸如 “ 1 9 9 9 0 6 1 7”或 “ 1 2 : 3 0 : 4 3”這樣的值。 MySQL 還支持日期 /時間的組合,如 “ 19990617 12:30:43”。要特別注意這樣一個事實,即 MySQL 是按年 月 日的順序表示日期的。 MySQL 的初學者通常對這一點很驚奇,其實這是 ANSI SQL 的標準格式??梢岳?D AT E _ F O R M AT( ) 函數以任意形式顯示日期值,但是缺省顯示格式首先顯示年,而且輸入值也必須首先給出年。 ? NULL 值 ? NULL 是一種 “ 無類型 ” 的值。它過去慣常表示的意思是 “ 無值 ” 、 “ 未知值 ” 、 “ 丟失的值 ” 、 “ 溢出值 ” 以及 “ 沒有上述值 ” 等??蓪?NULL 值插入表中、從表中檢索它們