MySQL 5第二次學科練習

2013-05-07_134149

 

這是第二次ㄚ琪自我練習的結果,測試50題,答對41題得82分,錯9題扣9分,總計得分73分,呼,這次終於可以勉強過關了,我們可能還需要加強學習跟練習才行,不過工作達人的MySQL不夠強,那還真是汗顏啊。

第一題錯的還是以前錯的,在MySQL BIT_LENGTHㄚ琪已經很努力的學了一次,還是錯,明明知道是byte但是就是會忘記要轉成bit。

第二題也是錯以前的,在在SQL敘述中使用COLLATE,明明就只有ORDER BY、GROUP BY、AS、聚合函式、DISTINCT、WHERE跟HAVING有關係,怎麼INSERT跟UPDATE就是沒關係,卻是記不起來,但是現在反倒是會想,為什麼會沒有關係啊?

第三題

2013-05-07_141002

 

這是MySQL 5實力養成暨評量裡的4-59.『當建立ENUM資料欄位時,最多可指定多少個列舉值?』

答案:(D)65535

這種題目真的是麻煩了,很多就是要背了,應該沒什麼好法子可以瞭解了。

手冊可以參考MySQL 5.7 Reference Manual :: 11 Data Types :: 11.4 String Types :: 11.4.4 The ENUM Type

或簡體手冊

MySQL 5.1参考手册 :: 11. 列类型::11.4. String类型::11.4.4. ENUM类型

ㄚ琪轉成繁體列於下:

是一個字符物件,其值來自表創建時在列規定中顯示枚舉的一列值。

在某些情況 ​​下,ENUM值也可以為空字串( ” )NULL

·         如果你將一個非法值插入ENUM (也就是說,允許的值列之外的字串),將插入空字串以作為特殊錯誤值。該字串與“普通”空字串不同,該字串有數值0後面有詳細討論。

·         如果將ENUM列聲明為允許NULLNULL值則為該列的一個有效值,並且預設值為NULL如果ENUM列被聲明為NOT NULL,其預設值為允許的值列的第1個元素。

每個枚舉值有一個索引:

·         來自列規定的允許的值列中的值1開始編號

·         空字串錯誤值的索引值是0這說明你可以使用下面的SELECT語句來找出分配了非法ENUM值的行:

·                 > SELECT * FROM tbl_name WHERE enum_col =0;

·          NULL值的索引是NULL

例如,定義為ENUM的列(‘one’ ‘two’‘three’)可以有下面所示任何值。還顯示了每個值的索引:

索引
NULL NULL
0
‘one’ 1
‘two’ 2
‘three’ 3

枚舉最多可以有65,535個元素

當創建表時,ENUM成員值的尾部空格將自動被刪除。

當檢索時,保存在ENUM列的值使用列定義中所使用的大小寫來顯示。請注意可以為ENUM列分配字符集和校對規則。對於二進制或大小寫敏感的校對規則,當為列分配值時應考慮大小寫。

如果在數值上下文中檢索一個ENUM值,將返回列值的索引。例如,你可以這樣從ENUM列搜索數值:

mysql> SELECT enum_col +0 FROM tbl_name ;

如果將一個數字保存到ENUM列,數字被視為索引,並且保存的值是該索引對應的枚舉成員。(但是,這不適合LOAD DATA,它將所有輸入視為字符串)不建議使用類似數字的枚舉值來定義一個ENUM列,因為這很容易引起混淆。例如,下面的列含有字符串值‘0’ ‘1’‘2’的枚舉成員,但數值索引值為23

numbers ENUM('0','1','2')

根據枚舉成員在列定義中列出的順序對ENUM值進行排序。(換句話說,ENUM值根據索引編號進行排序)例如,對於ENUM(‘a’ ‘b’)‘a’排在‘b’前面,但對於ENUM(‘b’ ‘a’)‘b’排在‘a’前面。空字串排在非空字串前面,並且NULL值排在所有其它枚舉值前面。要想防止意想不到的結果,按字母順序規定ENUM列。還可以使用GROUP BY CAST(col AS CHAR)GROUP BY CONCAT(col)來確保按照詞彙對列進行排序而不是用索引數字。

如果你想要確定一個ENUM列的所有可能的值,使用SHOW COLUMNS FROM tbl_name LIKE enum_col,並解析輸出中第2列的ENUM定義。

Print Friendly, PDF & Email

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料