【正文】
? (字符)串值 ? 串是諸如 “ Madison, Wi s c o n s i n”或 “ patient shows improvement”這樣的值。 +12 和 都是合法的科學(xué)表示法表示的數(shù)。 ? 浮點(diǎn)數(shù)由一個(gè)阿拉伯?dāng)?shù)字序列、一個(gè)小數(shù)點(diǎn)和另一個(gè)阿拉伯?dāng)?shù)字序列組成。以十六進(jìn)制形式表示的整數(shù)由 “ 0 x”后跟一個(gè)或多個(gè)十六進(jìn)制數(shù)字( ” 0”到 “ 9”及 “ a”到 “ f”)組成。 用 MySQL 處理數(shù)據(jù) ? 數(shù)值值 ? 數(shù)值是諸如 48 或 這樣的值。在創(chuàng)建表時(shí),重要的是要了解怎樣為自己的目的選擇最好的類型,以及在幾種類型都可以用于想要存儲(chǔ)的值時(shí)選擇一種類型。 ■ 特殊數(shù)據(jù)類型,以及描述每種列類型的屬性。在錄入一行并發(fā)現(xiàn)錯(cuò)誤時(shí),這是非常方便的;您可以在按Enter 鍵前,在行內(nèi)退格并進(jìn)行修正。 ■ 以批方式運(yùn)行 m y s q l。當(dāng)然, mysql 自身并不關(guān)心某個(gè)查詢是否分成多行,但是長(zhǎng)的查詢很不好鍵入。有的外殼程序還允許利用上箭頭和下箭頭鍵(或許是 CtrlP 和 C t r l N)在歷史列表中上下移動(dòng)。 與 mysql 交互的技巧 ? 在 Windows 下,選項(xiàng)文件的內(nèi)容是相同的,但其名稱不同( c : \ m y. c n f),而且不調(diào)用 chmod 命令。在連接到服務(wù)器時(shí),用指定的主機(jī)名、用戶名和口令替換 serverhost、 yourname 和yourpass。這也表示在使用這些程序時(shí),選項(xiàng)文件減少了鍵入工作。 ? ■ 利用外殼程序的別名或腳本定義 mysql 命令行快捷鍵。 與 mysql 交互的技巧 ? 在激活 mysql 時(shí),有可能需要指定諸如主機(jī)名、用戶名或口令這樣的連接參數(shù)。 下面的語(yǔ)句將更新 Jerome 的電子郵件和通信地址: Update member set =??, street=?123 elm?, city=?Anytown?, state=?NY?, zip=?01003? where last_name=?york? and first_name=?Jerome?。這類似于SELECT 語(yǔ)句中的 WHERE 子句 Delete from president where state = “OH”。它是可選的,但是如果不選的話,將會(huì)刪除所有的記錄。(當(dāng)然,如果愿意的話,可以兩者都顯示。此查詢與前一個(gè)查詢的差別在于: ■ student 表被增加到了 FROM 子句中,因?yàn)槌?event 表和 score 表外還用到了它。它們是: ? ■ FROM 子句給出了不止一個(gè)表名,因?yàn)槲覀円獧z索的數(shù)據(jù)來(lái)自不止一個(gè)表: from event, score ? ■ WHERE 子句說(shuō)明 event 和 score 表是由每個(gè)表中的 event_id 值的匹配連接起來(lái)的: where … event,event_id = 從多個(gè)表中檢索信息 ? 此查詢中的其他列( d a t e、 s c o r e、 t y p e)可單獨(dú)使用而不用表名限定符,因?yàn)樗鼈冊(cè)诒碇兄怀霈F(xiàn)一次,從而不會(huì)出現(xiàn)含混。這是因?yàn)樾枰獙⒁粋€(gè)表中的信息與其他表中的信息相連接來(lái)得出查詢結(jié)果。 ? 除了 COUNT( ) 外還有許多匯總函數(shù)。 生成匯總 ? 如果不想用 LIMIT 子句來(lái)限制查詢輸出,而是利用查找特定的COUNT( ) 值來(lái)達(dá)到這個(gè)目的,可使用 H AVING 子句。 ? 如果增加、刪除或重新排序輸出列,必須注意檢查 O R D E RBY 子句,并且如果列號(hào)改變后還得記住它。例如,如果想得到各州產(chǎn)生的總統(tǒng)人數(shù),并按產(chǎn)生人數(shù)最多的州優(yōu)先排出,可以如下使用ORDER BY 子句: ? Select state,count(*) as count from president group by state order by count desc。 ■ 用單一查詢就可以得出所有結(jié)果,因此可以對(duì)結(jié)果進(jìn)行排序。 ? 可以利用單個(gè)查詢對(duì)一個(gè)列中不同的值進(jìn)行計(jì)數(shù)。 生成匯總 ? 可以根據(jù)匯總列中單獨(dú)的值對(duì)計(jì)數(shù)值進(jìn)行分解。 ? COUNT(*) 對(duì)選中的行進(jìn)行計(jì)數(shù)。如果一個(gè)查詢無(wú) WHERE 子句, COUNT(*) 將給出表中的行數(shù)。利用 DISTINCT 關(guān)鍵字來(lái)刪除結(jié)果中的重復(fù)行。 ? 下列模式匹配只含有四個(gè)字符的姓: ? Select last_name, first_name from prisident where last_name like “____”。為了進(jìn)行模式匹配運(yùn)算,可使用特殊的運(yùn)算符( LIKE 和 NOT LIKE),并且指定一個(gè)包含通配符的串。 ? 使用 D ATE_ADD( ) 或 D ATE_SUB( ) 從一個(gè)日期計(jì)算另一個(gè)日期。為了查找每年的今天出生的總統(tǒng),只要將他們的生日與 C U R R E N T _ D ATE 進(jìn)行比較即可 ? 可從一個(gè)日期減去另一個(gè)日期。例如,可通過(guò)查找月份值為 3 的日期,找出出生在相同月份(三月)的總統(tǒng) : ? Select last_name, first_name,birth from president where month(birth)=3 ? 此查詢也可以按月的名稱寫出 ? Select last_name, first_name,birth from president where monthname(birth)=“March”。 ? ■ 計(jì)算日期的差??梢詫?duì)日期進(jìn)行的一些運(yùn)算如下: ? ■ 按日期排序。 ? 如果列的別名包含空格,需要用雙引號(hào)括起來(lái)。在利用表達(dá)式來(lái)計(jì)算列值時(shí),此表達(dá)式被用作列標(biāo)題。表達(dá)式可以簡(jiǎn)單也可以復(fù)雜。 ? 自 MySQL 以來(lái),可按照一個(gè)公式來(lái)排序查詢結(jié)果。為了做到這一點(diǎn),必須指定兩個(gè)值。 ? 查詢結(jié)果可在多個(gè)列上進(jìn)行排序,而每個(gè)列的升序或降序可以互相獨(dú)立。)缺省時(shí),如果選擇了行,服務(wù)器對(duì)返回行的次序不作任何保證。 對(duì)查詢結(jié)果進(jìn)行排序 ? 有時(shí)我們注意到,在一個(gè)表裝入初始數(shù)據(jù)后,對(duì)其發(fā)布一條 SELECT * FROM tbl_name查詢,檢索出的行與這些行被插入的順序是相同的。 null ? 為了進(jìn)行 NULL 值的搜索,必須采用特殊的語(yǔ)法。 ? SELECT 語(yǔ)句的一般形式為: SELECT 要選擇的東西 FROM 一個(gè)或多個(gè)表 WHERE 數(shù)據(jù)必須滿足的條件 ? FROM 子句一般都要給出,但是如果不從表中選擇數(shù)據(jù),也可不給出 ? 數(shù)據(jù)庫(kù)和表名有可能區(qū)分大小寫的;這有取決服務(wù)器主機(jī)上使用的文件系統(tǒng)。對(duì)于如像 與 這樣的文件名, mysqlimport 將會(huì)認(rèn)為相應(yīng)的表名為member1 和 member2。正如使用 mysql 一樣,如果您需要指定連接參數(shù),可在命令行上數(shù)據(jù)庫(kù)名前指定它們。也有可能需要讀取其他格式的文件,或者指定不同的列次序。如果您的 MySQL 版本低于 3 . 2 2 . 1 5,則 LOAD DATA LOCAL 不起作用,因?yàn)槟菚r(shí)從客戶機(jī)讀取數(shù)據(jù)的能力是在 LOAD DATA 上的??梢杂肔OAD DATA 語(yǔ)句或用 mysqlimport 實(shí)用程序來(lái)裝入記錄。 ? Insert into tbl_name set col_name1=value1,col_name2=value2,… . ? Insert into member set last_name=“Stein”,first_name=“Waldo”。 ? INSERT INTO tbl_name(col_name,col_name2,… .) VALUES(value1,values,… ) ? Sample: insert into member(last_name,first_name) values(“Stein”,”Waldo”)。如果不能肯定的話,可使用 DESCRIBE tbl_name 來(lái)查看這個(gè)次序。 ? “I N TO”一詞自 MySQL 以來(lái)是可選的。 ? 還可以通過(guò)從某個(gè)文件讀取它們來(lái)增加記錄,在這個(gè)文件中,記錄既可以是利用 L O A D ? D ATA 語(yǔ)句或 mysqlimport 實(shí)用程序裝入的原始數(shù)據(jù)值,也可以是預(yù)先寫成可饋入 mysql 的 ? I N S E RT 語(yǔ)句的形式。它對(duì)于了解 MySQL 存儲(chǔ)表行中列的次序也很有用。如果想了解不需要終結(jié)符的語(yǔ)句有哪些,可發(fā)布 HELP 語(yǔ)句。 MySQL簡(jiǎn)介 ? 在創(chuàng)建表以及對(duì)這些表進(jìn)行各種操作之前,必須先創(chuàng)建 samp_db 數(shù)據(jù)庫(kù)。 3) 對(duì)表進(jìn)行數(shù)據(jù)插入、檢索、修改或刪除。這里用后綴為 “ . s q l”來(lái)表示該文件含有 SQL 語(yǔ)句。 ? 如果在查詢中調(diào)用一個(gè)函數(shù),在函數(shù)名和后跟的圓括號(hào)中間不允許有空格 ? 如果已經(jīng)開(kāi)始鍵入一個(gè)多行的查詢,而又不想立即執(zhí)行它,可鍵入‘ \ c? 來(lái)跳過(guò)(放棄)它。這是 UNIX 標(biāo)準(zhǔn)提示符之一;另一個(gè)為 “ $”。愿意讀哪個(gè)音都可以,不過(guò)在您對(duì)別人讀的時(shí)候,他可能會(huì)用他認(rèn)為是 “ 正確 ” 的發(fā)音對(duì)您進(jìn)行糾正。關(guān)于發(fā)音, MySQL 的發(fā)音為 “ m y e s s q u e u e e l l”。SQL 是當(dāng)今的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)語(yǔ)言,所有主要的數(shù)據(jù)庫(kù)系統(tǒng)都使用它。 管理系統(tǒng)( “ M S”)是允許通過(guò)插入、檢索、修改或刪除記錄來(lái)使用數(shù)據(jù)的軟件。所謂關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的含義如下: 數(shù)據(jù)庫(kù)( RDBMS 中的 “ D B”)是存儲(chǔ)信息的倉(cāng)庫(kù),以一種簡(jiǎn)單的、規(guī)則的方式進(jìn)行組織: 數(shù)據(jù)庫(kù)中的數(shù)據(jù)集組織為表。 ? 在數(shù)據(jù)庫(kù)世界中, MySQL 歸類為關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)( R D B M S)。 記錄可包含幾段信息;表中每一列對(duì)應(yīng)這些信息中的一段。 MySQL簡(jiǎn)介 MySQL簡(jiǎn)介 ? M y S Q L使用一種稱為 S Q L( Structured Query Language)的語(yǔ)言。它們的發(fā)音都是相同的,但可通過(guò)不同的大小寫字符和字體來(lái)區(qū)分。我不認(rèn)為哪個(gè)發(fā)音更好一些。命令如下: ? % mysql options ? 其中的 “ %”在本書中代表外殼程序提示符。 MySQL簡(jiǎn)介 ? 大部分情況下,用大寫字符、小寫字符或大小寫字符混合鍵入查詢沒(méi)什么關(guān)系。例如,如果在文件 中存放有查詢,可如下執(zhí)行這些查詢: Mysql ? 可用這種辦法調(diào)用任何所需的文件。 2) 創(chuàng)建數(shù)據(jù)庫(kù)中的表。較少使用的操作是創(chuàng)建表的操作,而最不常用的操作是創(chuàng)建數(shù)據(jù)庫(kù)。 HELP 是另一個(gè)不需要終結(jié)符的語(yǔ)句。例如,下列兩個(gè)命令使我們能連接到在本地主機(jī)和 p i t v i p e 上的 samp_db 數(shù)據(jù)庫(kù)上: ? DESCRIBE 在您忘了表中的列名、需要知道列的類型、了解列有多寬等的時(shí)候很有用??赏ㄟ^(guò)發(fā)布 I N S E RT 語(yǔ)句手工將記錄插入某個(gè)表中。 INSERT INTO VALUES(“199393”,”Q”,NULL)。(一般,這就是創(chuàng)建表時(shí)列的定義次序。這對(duì)于希望建立只有幾個(gè)列需要初始設(shè)置的記錄是很有用的。 Insert ? 自 MySQL .10 以來(lái),可以 col_name = value 的形式給出列和值。 LOAD DATA ? 將記錄裝到表中的另一種方法是直接從文件讀取數(shù)據(jù)值。 ? 該語(yǔ)句讀取位于客戶機(jī)上當(dāng)前目錄中數(shù)據(jù)文件 m e m b e 的內(nèi)容,并將其發(fā)送到服務(wù)器裝入 member 表。還假定各個(gè)值是按列在表中的存放次序給出的。如果您的 MySQL 版本低于 3 . 2 2 . 1 5,這個(gè)實(shí)用程序不起作用,因?yàn)?local 選項(xiàng)需要 L O A D D ATA LOCAL。如果您有多個(gè)需要裝入單個(gè)表的文件,應(yīng)仔細(xì)地選擇文件名,否則mysqlimport 將不能使用正確的表名。每個(gè)子句都可簡(jiǎn)單、可復(fù)雜,從而 SELECT 作為一個(gè)總的語(yǔ)句也繁簡(jiǎn)皆宜。 ? MySQL 允許您一次從多個(gè)表中選擇列。 ? Select last_name,first_name from student where id = null。(刪除記錄在表中留下了未使用的 “ 空位 ” , MySQL 在以后插入新記錄時(shí)將會(huì)試圖對(duì)其填補(bǔ)。在對(duì)可能包含 NULL 值的列進(jìn)行排序時(shí),如果是升序排序, NULL 值出現(xiàn)在最前面,如果是按降序排序, NULL 值出現(xiàn)在最后。 ? LIMIT 也可以從查詢結(jié)果中取出中間部分。下面的查詢類似于前面那個(gè)查詢,但只顯示從第 11 行開(kāi)始的5 個(gè)記錄 : ? Select last_name, first_name,birth from president order by birth limit 10,5。 MySQL 還允許作為一個(gè)公式的結(jié)果來(lái)計(jì)算輸出列的值。 ? 此查詢把名和姓連接起來(lái),中間間隔一個(gè)空格,將總統(tǒng)名形成一個(gè)單一字符串,而且將出生城市和州連接在一起,中間隔一個(gè)逗號(hào),形成出生地。這樣的名稱為列別名。 MySQL 提供了幾種對(duì)日期進(jìn)行處理的方法。 ? ■ 提取日期值的組成部分,如年、月或日。 ? 為了測(cè)試或檢索日期的成分,可使用諸如 YEAR(