顾美玲勾引管家|日韩黄色成人|国产精品theporn动漫|欧美日日日|国产精品探花在线

專業只做數據庫實訓和認證的品牌機構

微信公眾號新浪微博
免費咨詢電話:400-0909-964
當前位置: 網站首頁 > MySQL培訓 > MySQL課程 > MySQL入門教程:ENUM和SET類型

MySQL入門教程:ENUM和SET類型

文章來源: 更新時間:2016/7/15 17:09:12

在線老師點擊咨詢:

最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!

我要咨詢

MySQL入門教程:ENUM和SET類型,ENUM和SET類型是兩種特殊的字符串類型,它們有很多相似之處,使用方法也是分類系,通常都從一個在表創建時明確列舉的允許值的一張表中選擇,其主要的區別是ENUM列必須是值集合中的一個成員,而SET列可以包括其中的任意成員。

例如,創建如下兩個串列:

color ENUM(“red”,”black”,”green”,”yellow”)

property SET(“car”,”house”,”stock”) NOT NULL

那么color和property可能的值分別為:

color:NULL、”red”、”black”、”green”和”yellow”

而property可能的值就復雜的多:

“”

“car”

“house”

“car,house”

“stock”

“car,stock”

“house,stock”

“car,house,stock”

由于空串可以表示不具備值的集合的任何一個值,所以這也是一個合法的SET值。

ENUM類型可以有65536個成員,而SET類型最多可以有64個成員。

ENUM和SET類型是如何存儲的

ENUM和SET類型在數據庫內部并不是用字符的方式存儲的,而是使用一系列的數字,因此更為高效。

ENUM和SET類型的合法值列表的原則為:

此列表決定了列的可能合法值。

可按任意的大小寫字符插入 ENUM 或 SET 值,但是列定義中指定的串的大小寫字符決定了以后檢索它們時的大小寫。

在 ENUM 定義中的值順序就是排序順序。SET 定義中的值順序也決定了排序順序,但是這個關系更為復雜,因為列值可能包括多個集合成員。

SET 定義中的值順序決定了在顯示由多個集合成員組成的 SET 列值時,子串出現的順序。

對于ENUM列類型,成員是從 1 開始順序編號的。(0 被 MySQL 用作錯誤成員,如果以串的形式表示就是空串。)枚舉值的數目決定了 ENUM 列的存儲大小。一個字節可表示 256 個值,兩個字節可表示 65 536 個值。因此,枚舉成員的最大數目為 65 536(包括錯誤成員),并且存儲大小依賴于成員數目是否多于 256 個。在 ENUM 定義中,可以最多指定 65 535(而不是 65 536)個成員,因為 MySQL 保留了一個錯誤成員,它是每個枚舉的隱含成員。在將一個非法值賦給 ENUM 列時,MySQL 自動將其換成錯誤成員。

對于SET類型,SET 列的集合成員不是順序編號的,而是每個成員對應 SET 值中的一個二進制位。第一個集合成員對應于 0 位,第二個成員對應于 1 位,如此等等。數值 SET 值 0 對應于空串。SET 成員以位值保存。每個字節的 8 個集合值可按此方式存放,因此 SET 列的存儲大小是由集合成員的數目決定的,最多 64 個成員。對于大小為 1 到 8、9 到 16、17 到 24、25 到 32、33 到 64 個成員的集合,其 SET 值分別占用 1、2、3、4 或 8 個字節。

例如,還是上面的例子,我們從一個表中檢索出ENUM和SET列的值,及其對應的數值:

對于ENUM類型的color列

SELECT color,color+0 from my_table

其結果為:

+--------+---------+
| color  | color+0 |
+--------+---------+
| NULL   | NULL   |
| black  |    2 |
| green  |    3 |
| yellow  |    4 |
| red   |    1 |
| red   |    1 |
| green  |     3 |
| green  |    3 |
| yellow |     4 |
+--------+---------+

對于SET類型的property列,同樣的

SELECT property,property+0 FROM my_table;

其結果為

+-----------------+------------+
| property     | property+0 |
+-----------------+------------+
|                  0 |
| house,stock   |      6 |
| car,stock    |      5 |
| stock      |      4 |
| car,house,stock |      7 |
| car,house    |      3 |
| house      |      2 |
| car,stock      |      5 |
| house,stock   |      6 |
+-----------------+------------+

你可以仔細了解它們之間的對應關系。

因此,在給列賦值、檢索時,你不僅可以使用值表中的字符串,也可以使用數值來表示一個值,例如下列語句是等價的:

INSERT my_table SET property=’car,house,stock’

INSERT my_table SET property=7

對于ENUM列也同樣如此:

INSERT my_table SET color=’red’;

INSERT my_table SET color=1

本文地址:http://www.mudan321.com/mysql/kecheng/12482340422.html 轉載請注明!


PostgreSQL入門到精通 100+ 個學習資料

Oracle培訓機構

金牌講師<>

冉乃綱-老師CUUG金牌講師
冉老師 CUUG金牌講師 Oracle及RedHat高級講師、Unix/Linux 資深專家...[詳細了解老師]

免費咨詢上課流程 客服在線中

陳衛星-老師CUUG金牌講師
陳老師 CUUG金牌講師 精通Oracle管理、備份恢復、性能優化 11年Ora...[詳細了解老師]

免費咨詢上課流程 客服在線中

選學校如何選擇適合自己的學校

CUUG -CHINA UNIX USER GROUP,是國際UNIX組織UNIFORUM的中國代表,是國內悠久的專業UNIX培訓機構,被譽為中國UNIX 的搖籃。多年來,以提高教學質量為本,強調素質教育,積極引進、消化國外的新技術,有效的結合中國....[詳情]

一站式服務(從入學到就業一幫到底)

入學

學習

就業

實操

食宿
地址:北京市海淀區田村山南路35號院17號樓
課程咨詢: 400-0909-964
企業服務:137 1818 8639(陳經理)
部分信息來源于網絡,如有錯誤請聯系指正!
版權所有@北京神腦資訊技術有限公司 (CUUG,中國UNIX用戶協會) Copyright 2016 ALL Rights Reserved 京ICP備11008061號-1