新聞中心
簡介:

在數(shù)據(jù)庫中,我們經(jīng)常會(huì)遇到枚舉類型這個(gè)概念。枚舉類型是一種可以定義固定選項(xiàng)的數(shù)據(jù)類型,它可以限制一個(gè)字段只能填寫特定的值。在數(shù)據(jù)庫中,枚舉類型被廣泛應(yīng)用于需要固定優(yōu)選項(xiàng)的地方,比如性別、婚姻狀況、教育程度等。本文將從枚舉類型的基本概念、定義方法、應(yīng)用場景、優(yōu)缺點(diǎn)等方面對(duì)其進(jìn)行詳細(xì)探析。
一、枚舉類型的基本概念
枚舉類型是一種定義固定選項(xiàng)的數(shù)據(jù)類型,通常使用關(guān)鍵字enum來定義。在MySQL等數(shù)據(jù)庫中,枚舉類型可以作為表格列定義的一部分,用于限制特定字段的值。枚舉類型中的每個(gè)值代表了一項(xiàng)枚舉值,可以設(shè)置值得別名和整數(shù)值。枚舉類型在程序之間的傳遞很容易,不需要加入多余的程序代碼。
二、枚舉類型的定義方法
通常來說,枚舉類型的語法比較簡單,只需要使用關(guān)鍵字enum即可定義。下面是一個(gè)簡單的枚舉類型定義例子:
enum GenderEnum{ Male, Female }
在這個(gè)例子中,我們定義了一個(gè)名為GenderEnum的枚舉類型,其中又定義了枚舉值Male和Female。這樣,我們就可以通過這個(gè)GenderEnum類型來限制一個(gè)數(shù)據(jù)庫表格中個(gè)字段只能是Male或Female,其他值不允許出現(xiàn)。
通常來說,枚舉類型會(huì)有多種“擴(kuò)展定義”的方式。這些定義方式使得枚舉類型更加實(shí)用和高效。例如:
1. 命名枚舉:
通過給枚舉項(xiàng)指定特定的別名來定義枚舉類型。這個(gè)方法使得程序員可以增加可讀性和可維護(hù)性。
enum GenderEnum{ Male = 0, Female = 1 }
2. 位域枚舉:
通過將枚舉值限制在一個(gè)位域中來定義枚舉類型。即可以將每個(gè)可能的枚舉值(即枚舉項(xiàng))表示為第2的幾次方,一個(gè)枚舉變量可以表示起多個(gè)枚舉項(xiàng)。
enum Permissions{ Read=1, Write=2, Exec=4, All=Read|Write|Exec }
大部分情況下,我們只需要定義eunm類型,然后在表格中關(guān)聯(lián)定義的枚舉類型即可。例如:
CREATE TABLE student (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender GenderEnum NOT NULL,
PRIMARY KEY (`id`)
);
在這個(gè)包含了GenderEmum枚舉類型的student表格中,gender字段只允許使用GenderEnum類型中定義的兩個(gè)枚舉值。
三、枚舉類型的應(yīng)用場景
枚舉類型在數(shù)據(jù)庫中廣泛應(yīng)用,通常用于以下場景:
1. 固定優(yōu)選項(xiàng)類型字段
枚舉類型通常會(huì)在數(shù)據(jù)庫中用于固定優(yōu)選項(xiàng)類型的字段。這包括性別、婚姻狀況、教育程度、職業(yè)等。它們通常都只允許有固定的值,而且與其他選項(xiàng)互斥。
2. 提高代碼可維護(hù)性
枚舉類型還可以幫助提高代碼的可維護(hù)性。與常量不同,枚舉值會(huì)自動(dòng)賦予可以改為別名的名稱。這樣可以使得代碼更加可讀,使得僅從代碼本身就能夠顯式代碼的意圖。
四、枚舉類型的優(yōu)缺點(diǎn)
枚舉類型在使用中也存在一些優(yōu)缺點(diǎn)。
優(yōu)點(diǎn):
1. 枚舉類型能夠有效地限制數(shù)據(jù)庫中某些項(xiàng)的取值范圍,使得它們的使用更加靈活和安全。
2. 枚舉類型通常能夠提高代碼的可維護(hù)性,使得代碼可以顯式地表達(dá)出它的意思。
缺點(diǎn):
1. 枚舉類型的設(shè)置過程可能沒有普通整型字段那么快速和容易,因?yàn)樾枰瑫r(shí)定義每個(gè)枚舉項(xiàng)。
2. 如果枚舉項(xiàng)的總數(shù)很多,由于每個(gè)枚舉項(xiàng)都可以具有命名值,所以會(huì)使得文件的體積變大,加載時(shí)會(huì)對(duì)程序增加時(shí)間和空間的成本。
五、
枚舉類型在數(shù)據(jù)庫中廣泛應(yīng)用。它們是一種極為方便的數(shù)據(jù)類型,可以限制一個(gè)字段輸入的值,并且可以節(jié)省很多重復(fù)代碼的編寫。盡管枚舉類型也存在一些缺點(diǎn),例如定義和擴(kuò)展成本的高昂和增加編程負(fù)擔(dān)等,但在正確使用的情況下,枚舉類型通常會(huì)帶來更多的優(yōu)點(diǎn)。通過熟練地掌握其語法、應(yīng)用場景和優(yōu)缺點(diǎn),我們可以更好地使用枚舉類型,并在數(shù)據(jù)處理過程中充分發(fā)揮它們的作用。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220sql enum類型
我對(duì)MYSQL不是很了解,不過看樣子應(yīng)該是創(chuàng)建表困蠢的語句sex應(yīng)該是字段名,enum(男女)應(yīng)蔽尺態(tài)該表示字段限定的值只能是男和女,NOT NULL是不為空的意思,default 是返回的意思,結(jié)合起來應(yīng)該是 字段名SEX 限定內(nèi)容 男和女,字段值不能為空,默認(rèn)是男的意思。當(dāng)然以上是我根據(jù)宏源大部分編程來猜的。。
enum 是
枚舉類型
, sex 尺明性別字段 加約束條件,默認(rèn)是 ‘男’,插入數(shù)據(jù)時(shí),sex字段只可以是’鎮(zhèn)仔男’或’女’,另外,MySQL 不支持check的陵旅告,雖然語法上不會(huì)報(bào)錯(cuò)是,分析建表語句的時(shí)候會(huì)被忽略.
根據(jù)用戶定義的枚舉值與分片節(jié)點(diǎn)映射文件,直接定位目標(biāo)分片。
用戶在rule.xml中配置枚舉值文件路徑和分片索引是字符串還是數(shù)字,DBLE在啟動(dòng)時(shí)會(huì)將枚舉值文件加載到內(nèi)存中,形成一個(gè)映射表
在DBLE的運(yùn)行過程中,用戶訪問使用這個(gè)算法的表時(shí),WHERE子句中的分片索引值會(huì)被提取出來,直接查映射表得到分片編號(hào)
與MyCat的類似分片算法對(duì)比
中間件
DBLE
MyCat
分片算法種類 enum 分區(qū)算法 分片枚舉
兩種中間件的枚舉分片算法使用上無差別。
開發(fā)注意點(diǎn)
【分片索引】1. 整型數(shù)字(可以為負(fù)數(shù))或字符串((不含=和換行符)
【分片索引】2. 枚舉值之間不能重復(fù)
Male=0Male=1
或者
123=1123=2
會(huì)導(dǎo)致分片策略加載出錯(cuò)
【分片索引】3. 不同枚舉值可以映射到同一個(gè)分片上
Mr=0Mrs=1Miss=1Ms=1123=0
運(yùn)維注意點(diǎn)
【擴(kuò)容】1. 增加枚舉值無需數(shù)據(jù)再平衡
【擴(kuò)容】2. 增加一個(gè)枚舉值的分片數(shù)量數(shù)時(shí),需要對(duì)局部數(shù)據(jù)進(jìn)行遷移
【縮容】1. 減少枚舉值需要御氏數(shù)據(jù)再平衡
【縮容】2. 減少一個(gè)枚舉值的分片數(shù)量數(shù)時(shí),需要對(duì)局部數(shù)據(jù)進(jìn)行遷移
配置注意點(diǎn)
【配置項(xiàng)】1. 在 rule.xml 中,可配置項(xiàng)為 、 和
【配置項(xiàng)】2. 在 rule.xml 中配置 標(biāo)簽,非必須配置項(xiàng),不配置該項(xiàng)的話,用戶的分片索引值沒落在 mapFile 定義的范歲兄圍時(shí),DBLE 會(huì)報(bào)錯(cuò);若需要配置,必須為非負(fù)整數(shù),用戶的分片索引值沒落在 mapFile 定義的范圍時(shí),DBLE 會(huì)路由至這個(gè)值的 MySQL 分片
【配置項(xiàng)】3. 在 rule.xml 中配置 標(biāo)簽,范圍映射文件的路徑:若在映射文件在 DBLE_HOME/conf 或其中,則可以使用相對(duì)路徑的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 時(shí),配置值就可以簡寫為 map/table_map.txt;映射文件在 DBLE_HOME/conf 目錄以外時(shí),需要使用絕對(duì)路徑,但這種做法需要考慮用戶權(quán)限等問題,因此不建議把映射文件放在 DBLE_HOME/conf 外。
【配置項(xiàng)】4. 編輯 mapFile 所配置的文件
記錄格式為:=
枚舉值可以是整型數(shù)字,或任意字符(除了=和換行符),分片編號(hào)必須是非負(fù)整型數(shù)字,記錄之間以換行分隔,一行僅能有一條記錄,枚舉值不能夠是“DEFAULT_NODE”這個(gè)字符串,允許以“//”和“#”在行首來注釋該行
【配置項(xiàng)】5. 在 rule.xml 中配置 標(biāo)簽;type 必須為整型;取值為 0 時(shí),mapFile 的必須為整型;取值乎拆襲為非 0 時(shí),mapFile 的可以是任意字符(除了=和換行符)
mysql怎么獲取數(shù)據(jù)表字段enum類型的默認(rèn)值
enum有優(yōu)點(diǎn)。但個(gè)人覺得。。。缺點(diǎn)更多,客觀的講:優(yōu)點(diǎn)主要是在建數(shù)據(jù) 庫的時(shí)候就可以把一些值給規(guī)范好。缺點(diǎn)是。。enum不適合PHP。主要是PHP是弱類型,如:你insert into ….. set a= 1,你沒蔽知道你是想 a= ‘1’者桐扮 還是 a= 1(a=’1’是插入值1,a=1是插入enum的之一個(gè)值,尤其php弱類型的,首灶如果int的,很少有人在sql里加雙引號(hào)。),這是PHP和mysql 在使用enum 更大的問題。所以。。安心點(diǎn)啦。干脆點(diǎn)直接tinyin
mysql怎么獲取數(shù)據(jù)表字段enum類型的默認(rèn)值
本節(jié)主要內(nèi)容:
MySQL數(shù)據(jù)類型之枚舉類型ENUM
MySQL數(shù)據(jù)庫提供針對(duì)字符串存儲(chǔ)的一種特殊數(shù)據(jù)類型:枚舉類型ENUM,這種喊野數(shù)據(jù)類型可以給予我們更多提高性能、降低存儲(chǔ)容量和降低程序代碼理解的技巧,前面介紹了首先介紹了四種數(shù)據(jù)類型的特性總結(jié),其后又分別介紹了布爾類型BOOL或稱布爾類型亂滲者BOOLEAN,以及后續(xù)會(huì)再單獨(dú)介紹類型SET。
本文詳細(xì)介紹類型enum測試過程與總結(jié),加深對(duì)mysql數(shù)據(jù)庫類型enum的理解記憶。
n 枚舉類型ENUM
a).數(shù)據(jù)庫表mysqlops_enum結(jié)構(gòu)
執(zhí)行數(shù)據(jù)庫表mysqlops_enum創(chuàng)建的SQL語句:
復(fù)制代碼代碼示例:
root@localhost : test 11:22:29> CREATE TABLE Mysqlops_enum(ID INT NOT NULL AUTO_INCREMENT,
-> Job_type ENUM(‘DBA’,’SA’,’Coding Engineer’,’JavaScript’,’NA’,’QA’,”,’other’) NOT NULL,
-> Work_City ENUM(‘shanghai’,’beijing’,’hangzhou’,’shenzhen’,’guangzhou’,’other’) NOT NULL DEFAULT ‘shanghai’,
-> PRIMARY KEY(ID)
-> )ENGINE=InnoDB CHARACTER SET ‘utf8’ COLLATE ‘utf8_general_ci’;
Query OK, 0 rows affected (0.00 sec)
執(zhí)行查詢數(shù)據(jù)庫表mysqlops_enum結(jié)構(gòu)的SQL語句:
復(fù)制代碼代碼示例:
root@localhost : test 11:23:31> SHOW CREATE TABLE Mysqlops_enum\G
*************************** 1. row ***************************
Table: Mysqlops_enum
Create Table: CREATE TABLE `Mysqlops_enum` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Job_type` enum(‘DBA’,’SA’,’Coding Engineer’,’JavaScript’,’NA’,’QA’,”,’other’) NOT NULL,
`Work_City` enum(‘shanghai’,’beijing’,’hangzhou’,’shenzhen’,’guangzhou’,’other’) NOT NULL DEFAULT ‘shanghai’,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
小結(jié):
為方便測試枚舉類型,如何處理字段定義的默認(rèn)值、是否允許為NULL和空值的情況,我們定義了2個(gè)枚舉類型的字段名,經(jīng)過對(duì)比創(chuàng)建與查詢數(shù)據(jù)庫中表的結(jié)構(gòu)信息,沒有發(fā)現(xiàn)MySQL數(shù)據(jù)庫默認(rèn)修改任何信息。
b). 寫入不同類型的測試數(shù)據(jù)
寫入一條符合枚舉類型定義的記錄值:
復(fù)制代碼代碼示例:
root@localhost : test 11:22:35> INSERT INTO Mysqlops_enum(ID,Job_type,Work_City) VALUES(1,’QA’,’shanghai’);
Query OK, 1 row affected (0.00 sec)
測試第二個(gè)枚舉類型字Work_City是否允許為空記錄值:嘩薯
復(fù)制代碼代碼示例:
root@localhost : test 11:22:42> INSERT INTO Mysqlops_enum(ID,Job_type,Work_City) VALUES(2,’NA’,”);
Query OK, 1 row affected, 1 warning (0.00 sec)
root@localhost : test 11:22:48> SHOW WARNINGS;
++——+——+
| Level | Code | Message|
++——+——+
| Warning | 1265 | Data truncated for column ‘Work_City’ at row 1 |
++——+——+
1 row in set (0.00 sec)
測試第二個(gè)枚舉類型字段Work_City是否允許存儲(chǔ)NULL值:
復(fù)制代碼代碼示例:
root@localhost : test 11:22:53> INSERT INTO Mysqlops_enum(ID,Job_type,Work_City) VALUES(3,’Other’,NULL);
ERROR 1048 (23000): Column ‘Work_City’ cannot be null
測試之一個(gè)枚舉類型字段Job_type是否可以存儲(chǔ)空白值:
復(fù)制代碼代碼示例:
root@localhost : test 11:22:59> INSERT INTO Mysqlops_enum(ID,Job_type,Work_City) VALUES(4,”,’hangzhou’);
Query OK, 1 row affected (0.00 sec)
測試第二個(gè)枚舉類型字段Job_City如何處理沒有在定義中描述的值域之一個(gè)枚舉類型字段Work_Type的默認(rèn)值沒指定情況下,會(huì)默認(rèn)填寫那個(gè)值:
復(fù)制代碼代碼示例:
root@localhost : test 11:23:06> INSERT INTO Mysqlops_enum(ID,Work_City) VALUES(5,’ningbo’);
Query OK, 1 row affected, 1 warning (0.00 sec)
root@localhost : test 11:23:13> SHOW WARNINGS;
++——+——+
| Level | Code | Message|
++——+——+
| Warning | 1265 | Data truncated for column ‘Work_City’ at row 1 |
++——+——+
1 row in set (0.00 sec)
測試第二個(gè)枚舉類型字段未插入數(shù)據(jù)的情況下,是否能使用上字段定義中指定的默認(rèn)值:
復(fù)制代碼代碼示例:
root@localhost : test 11:23:17> INSERT INTO Mysqlops_enum(ID,Job_type) VALUES(6,’DBA’);
Query OK, 1 row affected (0.00 sec)
根據(jù)用戶定義的枚舉值與分片節(jié)點(diǎn)映射文件,直接定位目標(biāo)分片。
用戶在rule.xml中配置枚舉值文件路徑和分片索引是字符串還是數(shù)字,DBLE在啟動(dòng)時(shí)會(huì)將枚舉值文件加載到內(nèi)存中,形成一個(gè)映射表
在DBLE的運(yùn)行過程中,用戶訪問使用這個(gè)算法的表時(shí),WHERE子句中的分片索引值會(huì)被提取出來,直接查映射表得到分片編號(hào)
與MyCat的類似分片算法對(duì)比
中間件
DBLE
MyCat
分片算法種類 enum 分區(qū)算法 分片枚舉
兩種中間件的枚舉分片算法使用上無差別。
開發(fā)注意點(diǎn)
【分片索引】1. 整型數(shù)字(可以為負(fù)數(shù))或字符串((不含=和換行符)
【分片索引】2. 枚舉值之間不能重復(fù)
Male=0Male=1
或者
123=1123=2
會(huì)導(dǎo)致分片策略加載出錯(cuò)
【分片索引】3. 不同枚舉值可以映射到同一個(gè)分片上
Mr=0Mrs=1Miss=1Ms=1123=0
運(yùn)維注意點(diǎn)
【擴(kuò)容】1. 增加枚舉值無需數(shù)據(jù)再平衡
【擴(kuò)容】2. 增加一個(gè)枚舉值的分片數(shù)量數(shù)時(shí),需要對(duì)局部數(shù)據(jù)進(jìn)行遷移
【縮容】1. 減少枚舉值需要御氏數(shù)據(jù)再平衡
【縮容】2. 減少一個(gè)枚舉值的分片數(shù)量數(shù)時(shí),需要對(duì)局部數(shù)據(jù)進(jìn)行遷移
配置注意點(diǎn)
【配置項(xiàng)】1. 在 rule.xml 中,可配置項(xiàng)為 、 和
【配置項(xiàng)】2. 在 rule.xml 中配置 標(biāo)簽,非必須配置項(xiàng),不配置該項(xiàng)的話,用戶的分片索引值沒落在 mapFile 定義的范歲兄圍時(shí),DBLE 會(huì)報(bào)錯(cuò);若需要配置,必須為非負(fù)整數(shù),用戶的分片索引值沒落在 mapFile 定義的范圍時(shí),DBLE 會(huì)路由至這個(gè)值的 MySQL 分片
【配置項(xiàng)】3. 在 rule.xml 中配置 標(biāo)簽,范圍映射文件的路徑:若在映射文件在 DBLE_HOME/conf 或其中,則可以使用相對(duì)路徑的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 時(shí),配置值就可以簡寫為 map/table_map.txt;映射文件在 DBLE_HOME/conf 目錄以外時(shí),需要使用絕對(duì)路徑,但這種做法需要考慮用戶權(quán)限等問題,因此不建議把映射文件放在 DBLE_HOME/conf 外。
【配置項(xiàng)】4. 編輯 mapFile 所配置的文件
記錄格式為:=
枚舉值可以是整型數(shù)字,或任意字符(除了=和換行符),分片編號(hào)必須是非負(fù)整型數(shù)字,記錄之間以換行分隔,一行僅能有一條記錄,枚舉值不能夠是“DEFAULT_NODE”這個(gè)字符串,允許以“//”和“#”在行首來注釋該行
【配置項(xiàng)】5. 在 rule.xml 中配置 標(biāo)簽;type 必須為整型;取值為 0 時(shí),mapFile 的必須為整型;取值乎拆襲為非 0 時(shí),mapFile 的可以是任意字符(除了=和換行符)
數(shù)據(jù)庫有枚舉類型數(shù)據(jù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫有枚舉類型數(shù)據(jù),數(shù)據(jù)庫中的枚舉數(shù)據(jù)類型探析,sql enum類型,mysql怎么獲取數(shù)據(jù)表字段enum類型的默認(rèn)值的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
網(wǎng)頁名稱:數(shù)據(jù)庫中的枚舉數(shù)據(jù)類型探析(數(shù)據(jù)庫有枚舉類型數(shù)據(jù))
當(dāng)前URL:http://www.5511xx.com/article/djdcoss.html


咨詢
建站咨詢
