新聞中心
mysql中enum類型怎么設(shè)置
根據(jù)用戶定義的枚舉值與分片節(jié)點映射文件,直接定位目標(biāo)分片。
為南和等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及南和網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計、南和網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
用戶在rule.xml中配置枚舉值文件路徑和分片索引是字符串還是數(shù)字,DBLE在啟動時會將枚舉值文件加載到內(nèi)存中,形成一個映射表
在DBLE的運(yùn)行過程中,用戶訪問使用這個算法的表時,WHERE子句中的分片索引值會被提取出來,直接查映射表得到分片編號
與MyCat的類似分片算法對比
中間件
DBLE
MyCat
分片算法種類 ? ?enum 分區(qū)算法 ? ?分片枚舉 ?
兩種中間件的枚舉分片算法使用上無差別。
開發(fā)注意點
【分片索引】1. 整型數(shù)字(可以為負(fù)數(shù))或字符串((不含=和換行符)
【分片索引】2. 枚舉值之間不能重復(fù)
Male=0Male=1
或者
123=1123=2
會導(dǎo)致分片策略加載出錯
【分片索引】3. 不同枚舉值可以映射到同一個分片上
Mr=0Mrs=1Miss=1Ms=1123=0
運(yùn)維注意點
【擴(kuò)容】1. 增加枚舉值無需數(shù)據(jù)再平衡
【擴(kuò)容】2. 增加一個枚舉值的分片數(shù)量數(shù)時,需要對局部數(shù)據(jù)進(jìn)行遷移
【縮容】1. 減少枚舉值需要數(shù)據(jù)再平衡
【縮容】2. 減少一個枚舉值的分片數(shù)量數(shù)時,需要對局部數(shù)據(jù)進(jìn)行遷移
配置注意點
【配置項】1. 在 rule.xml 中,可配置項為?property name="defaultNode" 、property name="mapFile" 和 property name="type"
【配置項】2. 在 rule.xml 中配置?property name="defaultNode"?標(biāo)簽,非必須配置項,不配置該項的話,用戶的分片索引值沒落在 mapFile 定義的范圍時,DBLE 會報錯;若需要配置,必須為非負(fù)整數(shù),用戶的分片索引值沒落在 mapFile 定義的范圍時,DBLE 會路由至這個值的 MySQL 分片
【配置項】3. 在 rule.xml 中配置 property name="mapFile"?標(biāo)簽,范圍映射文件的路徑:若在映射文件在 DBLE_HOME/conf 或其中,則可以使用相對路徑的形式配置,例如,映射文件是 DBLE_HOME/conf/map/table_map.txt 時,配置值就可以簡寫為 map/table_map.txt;映射文件在 DBLE_HOME/conf 目錄以外時,需要使用絕對路徑,但這種做法需要考慮用戶權(quán)限等問題,因此不建議把映射文件放在 DBLE_HOME/conf 外。
【配置項】4. 編輯 mapFile 所配置的文件
記錄格式為:枚舉值=分片編號
枚舉值可以是整型數(shù)字,或任意字符(除了=和換行符),分片編號必須是非負(fù)整型數(shù)字,記錄之間以換行分隔,一行僅能有一條記錄,枚舉值不能夠是“DEFAULT_NODE”這個字符串,允許以“//”和“#”在行首來注釋該行
【配置項】5. 在 rule.xml 中配置 property name="type"?標(biāo)簽;type 必須為整型;取值為 0 時,mapFile 的枚舉值必須為整型;取值為非 0 時,mapFile 的枚舉值可以是任意字符(除了=和換行符)
枚舉類型究竟有什么用?該怎么用? 求高手解答!
枚舉類型其實是整型,它的作用一是讓數(shù)值看起來更直觀二是圈定一個范圍,是數(shù)值被限定在這個范圍中。
1、 如果一個變量你需要幾種可能存在的值,那么就可以被定義成為枚舉類型。之所以叫枚舉就是說將變量或者叫對象可能存在的情況也可以說是可能的值一一例舉出來。
2、 舉個例子來說明一下吧,為了讓大家更明白一點,比如一個鉛筆盒中有一支筆,但在沒有打開之前你并不知道它是什么筆,可能是鉛筆也可能是鋼筆,這里有兩種可能,那么你就可以定義一個枚舉類型來表示它!
enum box{pencil,pen};//這里你就定義了一個枚舉類型的變量叫box,這個枚舉變量內(nèi)含有兩個元素也稱枚舉元素在這里是pencil和pen,分別表示鉛筆和鋼筆。
3、這里要說一下,如果你想定義兩個具有同樣特性枚舉類型的變量那么你可以用如下的兩種方式進(jìn)行定義!
enum box{pencil,pen};
enum box box2;//或者簡寫成box box2;
再有一種就是在聲明的時候同時定義。
enum {pencil,pen}box,box2; //在聲明的同時進(jìn)行定義!
枚舉變量中的枚舉元素系統(tǒng)是按照常量來處理的,故叫枚舉常量,他們是不能進(jìn)行普通的算術(shù)賦值的,(pencil=1;)這樣的寫法是錯誤的,但是你可以在聲明的時候進(jìn)行賦值操作!
enum box{pencil=1,pen=2};
4、但是這里要特別注意的一點是,如果你不進(jìn)行元素賦值操作那么元素將會被系統(tǒng)自動從0開始自動遞增的進(jìn)行賦值操作,說到自動賦值,如果你只定義了第一個那么系統(tǒng)將對下一個元素進(jìn)行前一個元素的值加1操作,例如
enum box{pencil=3,pen};//這里pen就是4系統(tǒng)將自動進(jìn)行pen=4的定義賦值操作。
mysql怎么獲取數(shù)據(jù)表字段enum類型的默認(rèn)值
mysql怎么獲取數(shù)據(jù)表字段enum類型的默認(rèn)值
本節(jié)主要內(nèi)容:
MySQL數(shù)據(jù)類型之枚舉類型ENUM
MySQL數(shù)據(jù)庫提供針對字符串存儲的一種特殊數(shù)據(jù)類型:枚舉類型ENUM,這種數(shù)據(jù)類型可以給予我們更多提高性能、降低存儲容量和降低程序代碼理解的技巧,前面介紹了首先介紹了四種數(shù)據(jù)類型的特性總結(jié),其后又分別介紹了布爾類型BOOL或稱布爾類型BOOLEAN,以及后續(xù)會再單獨介紹集合類型SET。
本文詳細(xì)介紹集合類型enum測試過程與總結(jié),加深對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個枚舉類型的字段名,經(jīng)過對比創(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)
測試第二個枚舉類型字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)
測試第二個枚舉類型字段Work_City是否允許存儲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
測試第一個枚舉類型字段Job_type是否可以存儲空白值:
復(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)
測試第二個枚舉類型字段Job_City如何處理沒有在定義中描述的值域第一個枚舉類型字段Work_Type的默認(rèn)值沒指定情況下,會默認(rèn)填寫那個值:
復(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)
測試第二個枚舉類型字段未插入數(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)
新聞標(biāo)題:mysql枚舉型怎么用 mysql枚舉類型enum表創(chuàng)建
網(wǎng)站路徑:http://www.ef60e0e.cn/article/docsoed.html