3.2 MySQL的命名規則
幾乎每條SQL 語句都在某種程度上涉及一個數據庫或其組成成分。本節介紹引用數據庫、表、列、索引和別名的語法規則。名稱是區分大小寫的,這裡也對其進行了介紹。
3.2.1引用數據庫的成分
在用名稱引用數據庫的成分時,受到可使用的字符以及名稱可具有的長度的限制。名稱的形式還依賴於使用它們的上下文環境:
■ 名稱中可用的字符。名稱可由服務器所采用的字符集中任意字母、數字、“_”和“ $”組成。名稱可按上述任意字符包括數字起頭。但是名稱不能單獨由數字組成,因為那樣會使其與數值相混。MySQL所提供的名稱用一個數起始的能力是很不尋常的。如果使用了這樣的一個名稱,要特別注意包含“ E”和“ e”的名稱,因為這兩個字符可能會導致與表達式的混淆。23e + 14 表示列23e 加14,但是23e+14 又表示什麼?它表示一個科學表示法表示的數嗎?
■ 名稱的長度。數據庫、表、列和索引的名稱最多可由6 4個字符組成。別名最多可長達256個字符。
■ 名稱限定詞。為了引用一個數據庫,只要指定其名稱即可,如:
其中db_name 為所要引用的數據庫名。要想引用一個表,可有兩種選擇。一種選擇是使用由數據庫名和表名組成的完全限定的表名,例如:
其中,tbl_name 為要引用的表名。另一種選擇是由表名自身來引用缺省(當前)數據庫中的一個表。如果samp_db 為缺省數據庫中的一個表,下面的兩個語句是等價的:
其中member 為數據庫samp_db 中的一個表。要引用一個列,有三種選擇,它們分別為:完全限定、部分限定和非限定。完全限定名(如db _ name . tbl _ name . col _ name)是完全地指定。部分限定名(如tbl_name. col _ name)引用指定表中的列。非限定名(如col _ name)引用由環境上下文給出的表中的列。下面兩個查詢使用了相同的列名,但是FROM 子句提供的上下文指定了從哪個表中選擇列:
雖然願意的話,提供完全限定名也是合法的,但是一般不需要提供完全限定名,如果用USE 語句選擇了一個數據庫,則該數據庫將成為缺省數據庫並在每一個非限定表引用中都隱含指向它。如果正使用一條SELECT 語句,此語句只引用了一個表,那麼該語句中的每個列引用都隱含指向這個表。只在所引用的表或數據庫不能從上下文中確定時,才需要對名稱進行限定。下面是一些會出現混淆的情形:
■ 從多個數據庫中引用表的查詢。任何不在缺省數據庫中的表都必須用“數據庫名表名”的形式引用,以便讓MySQL知道在哪個數據庫中找到該表。
■ 從多個表中選擇一列的查詢,其中不止一個表含有具有該名稱的列。
3.2.2 SQL 語句中的大小寫規則
SQL 中的大小寫規則在語句的不同部分是不同的,而且還取決於所引用的東西以及運行的操作系統。下面給出相應的說明:
■ SQL 關鍵字和函數名。關鍵字與函數名是不區分大小寫的。可按任意的大小寫字符給出。下面的三條語句是等價的:
■ 數據庫與表名。MySQL中數據庫和表名對應於服務器主機上的基本文件系統中的目錄和文件。因此,數據庫與表名是否區分大小寫取決於主機上的操作系統處理文件名的方式。運行在UNIX 上的服務器處理數據庫名和表名是區分大小寫的,因為UNIX 的文件名是區分大小寫的。而Windows 文件名是不區分大小寫的,所以運行在Windows上的服務器處理數據庫名和表名也是不區分大小寫的。如果在UNIX 服務器上創建一個某天可能會移到Windows 服務器上的數據庫,應該意識到這個特性:如果現在創建了兩個分別名為abc 和ABC 的表,它們在Windows 機器上將是沒有區別的。避免這種情況發生的一種方法是選擇一種字符(如小寫),總是以這種字符創建數據庫和表名。這樣,在將數據庫移到不同的服務器時,名稱的大小寫便不會產生問題。
■ 列與索引名。MySQL中列和索引名是不區分大小寫的。下面的查詢都是等價的:
■ 別名。別名是區分大小寫的。可按任意的大小寫字符說明一個別名(大寫、小寫或大小寫混合),但是必須在任何查詢中都以相同的大小寫對其進行引用。不管數據庫、表或別名是否是區分大小寫的,在同一個查詢中的任何地方引用同一個名稱都必須使用相同的大小寫。對於SQL 關鍵字、函數名或列名和索引名沒有這個要求。可在同一個查詢中多個地方用不同的大小寫對它們進行引用。當然,如果使用一致的大小寫而不是“胡亂寫”的風格(如SelECt NamE FrOm ...),相應的查詢可讀性要強得多。
查看全套"Mysql入門系列教程 ">>>>>