3.2 MySQL 的命名規(guī)則
幾乎每條SQL 語句都在某種程度上涉及一個數(shù)據(jù)庫或其組成成分。本節(jié)介紹引用數(shù)據(jù)庫、表、列、索引和別名的語法規(guī)則。名稱是區(qū)分大小寫的,這里也對其進(jìn)行了介紹。
3.2.1 引用數(shù)據(jù)庫的成分
在用名稱引用數(shù)據(jù)庫的成分時,受到可使用的字符以及名稱可具有的長度的限制。名稱的形式還依賴于使用它們的上下文環(huán)境:
■ 名稱中可用的字符。名稱可由服務(wù)器所采用的字符集中任意字母、數(shù)字、“_”和“ $”組成。名稱可按上述任意字符包括數(shù)字起頭。但是名稱不能單獨(dú)由數(shù)字組成,因?yàn)槟菢訒蛊渑c數(shù)值相混。MySQL 所提供的名稱用一個數(shù)起始的能力是很不尋常的。如果使用了這樣的一個名稱,要特別注意包含“ E”和“ e”的名稱,因?yàn)檫@兩個字符可能會導(dǎo)致與表達(dá)式的混淆。23e + 14 表示列23e 加1 4,但是23e+14 又表示什么?它表示一個科學(xué)表示法表示的數(shù)嗎?
■ 名稱的長度。數(shù)據(jù)庫、表、列和索引的名稱最多可由6 4個字符組成。別名最多可長達(dá)256個字符。
■ 名稱限定詞。為了引用一個數(shù)據(jù)庫,只要指定其名稱即可,如:

其中db_name 為所要引用的數(shù)據(jù)庫名。要想引用一個表,可有兩種選擇。一種選擇是使用由數(shù)據(jù)庫名和表名組成的完全限定的表名,例如:

其中,tbl_name 為要引用的表名。另一種選擇是由表名自身來引用缺?。ó?dāng)前)數(shù)據(jù)庫中的一個表。如果samp_db 為缺省數(shù)據(jù)庫中的一個表,下面的兩個語句是等價(jià)的:

其中member 為數(shù)據(jù)庫samp_db 中的一個表。要引用一個列,有三種選擇,它們分別為:完全限定、部分限定和非限定。完全限定名(如db _ name . tbl _ name . col _ name)是完全地指定。部分限定名(如t b l _ name . col _ name)引用指定表中的列。非限定名(如col _ name)引用由環(huán)境上下文給出的表中的列。下面兩個查詢使用了相同的列名,但是FROM 子句提供的上下文指定了從哪個表中選擇列:

雖然愿意的話,提供完全限定名也是合法的,但是一般不需要提供完全限定名,如果用USE 語句選擇了一個數(shù)據(jù)庫,則該數(shù)據(jù)庫將成為缺省數(shù)據(jù)庫并在每一個非限定表引用中都隱含指向它。如果正使用一條SELECT 語句,此語句只引用了一個表,那么該語句中的每個列引用都隱含指向這個表。只在所引用的表或數(shù)據(jù)庫不能從上下文中確定時,才需要對名稱進(jìn)行限定。下面是一些會出現(xiàn)混淆的情形:
■ 從多個數(shù)據(jù)庫中引用表的查詢。任何不在缺省數(shù)據(jù)庫中的表都必須用“數(shù)據(jù)庫名表名”的形式引用,以便讓MySQL 知道在哪個數(shù)據(jù)庫中找到該表。
■ 從多個表中選擇一列的查詢,其中不止一個表含有具有該名稱的列。
3.2.2 SQL 語句中的大小寫規(guī)則
SQL 中的大小寫規(guī)則在語句的不同部分是不同的,而且還取決于所引用的東西以及運(yùn)行的操作系統(tǒng)。下面給出相應(yīng)的說明:
■ SQL 關(guān)鍵字和函數(shù)名。關(guān)鍵字與函數(shù)名是不區(qū)分大小寫的。可按任意的大小寫字符給出。下面的三條語句是等價(jià)的:

■ 數(shù)據(jù)庫與表名。MySQL 中數(shù)據(jù)庫和表名對應(yīng)于服務(wù)器主機(jī)上的基本文件系統(tǒng)中的目錄和文件。因此,數(shù)據(jù)庫與表名是否區(qū)分大小寫取決于主機(jī)上的操作系統(tǒng)處理文件名的方式。運(yùn)行在UNIX 上的服務(wù)器處理數(shù)據(jù)庫名和表名是區(qū)分大小寫的,因?yàn)閁NIX 的文件名是區(qū)分大小寫的。而Windows 文件名是不區(qū)分大小寫的,所以運(yùn)行在Windows上的服務(wù)器處理數(shù)據(jù)庫名和表名也是不區(qū)分大小寫的。如果在UNIX 服務(wù)器上創(chuàng)建一個某天可能會移到Windows 服務(wù)器上的數(shù)據(jù)庫,應(yīng)該意識到這個特性:如果現(xiàn)在創(chuàng)建了兩個分別名為abc 和ABC 的表,它們在Windows 機(jī)器上將是沒有區(qū)別的。避免這種情況發(fā)生的一種方法是選擇一種字符(如小寫),總是以這種字符創(chuàng)建數(shù)據(jù)庫和表名。這樣,在將數(shù)據(jù)庫移到不同的服務(wù)器時,名稱的大小寫便不會產(chǎn)生問題。
■ 列與索引名。MySQL 中列和索引名是不區(qū)分大小寫的。下面的查詢都是等價(jià)的:

■ 別名。別名是區(qū)分大小寫的??砂慈我獾拇笮懽址f明一個別名(大寫、小寫或大小寫混合),但是必須在任何查詢中都以相同的大小寫對其進(jìn)行引用。不管數(shù)據(jù)庫、表或別名是否是區(qū)分大小寫的,在同一個查詢中的任何地方引用同一個名稱都必須使用相同的大小寫。對于SQL 關(guān)鍵字、函數(shù)名或列名和索引名沒有這個要求??稍谕粋€查詢中多個地方用不同的大小寫對它們進(jìn)行引用。當(dāng)然,如果使用一致的大小寫而不是“胡亂寫”的風(fēng)格(如SelECt NamE FrOm ...),相應(yīng)的查詢可讀性要強(qiáng)得多。