mysql 枚舉_詳解MySQL數據類型之枚舉類型ENUM的用法

本節主要內容:

MySQL數據類型之枚舉類型ENUM

MySQL數據庫提供針對字符串存儲的一種特殊數據類型:枚舉類型ENUM,這種數據類型可以給予我們更多提高性能、降低存儲容量和降低程序代碼理解的技巧,前面介紹了首先介紹了四種數據類型的特性總結,其后又分別介紹了布爾類型BOOL或稱布爾類型BOOLEAN,以及后續會再單獨介紹集合類型SET。

本文詳細介紹集合類型enum測試過程與總結,加深對mysql數據庫集合類型enum的理解記憶。

n? 枚舉類型ENUM

a).數據庫表mysqlops_enum結構

執行數據庫表mysqlops_enum創建的SQL語句:

復制代碼 代碼示例:

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)

執行查詢數據庫表mysqlops_enum結構的SQL語句:

復制代碼 代碼示例:

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)

小結:

為方便測試枚舉類型,如何處理字段定義的默認值、是否允許為NULL和空值的情況,我們定義了2個枚舉類型的字段名,經過對比創建與查詢數據庫中表的結構信息,沒有發現MySQL數據庫默認修改任何信息。

b). 寫入不同類型的測試數據

寫入一條符合枚舉類型定義的記錄值:

復制代碼 代碼示例:

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是否允許為空記錄值:

復制代碼 代碼示例:

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值:

復制代碼 代碼示例:

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是否可以存儲空白值:

復制代碼 代碼示例:

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的默認值沒指定情況下,會默認填寫那個值:

復制代碼 代碼示例:

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)

測試第二個枚舉類型字段未插入數據的情況下,是否能使用上字段定義中指定的默認值:

復制代碼 代碼示例:

root@localhost : test 11:23:17> INSERT INTO Mysqlops_enum(ID,Job_type) VALUES(6,'DBA');

Query OK, 1 row affected (0.00 sec)

小結:

若是枚舉類型字段定義為非NULL,默認的SQL_MODE模式下,插入NULL值則會報錯,導致SQL語句執行失敗;若是沒有明確申明非NULL,則允許插入NULL值;

若是枚舉類型字段的枚舉值中,沒有指定空格字符值,插入空格字符數據時,會出現數據截斷的警告信息,但是SQL語句依然執行成功;

若是向枚舉類型字段插入未在定義列表中出現的數據,則會出現數據截斷的警告信息,但是SQL語句依然執行成功;

若是枚舉類型定義為非NULL,向數據庫表中插入新數據,但未指定枚舉類型字段的值,則使用枚舉類型字段定義申明的默認值,若是無顯示申明則是采用枚舉類型字段的枚舉列表中第一個值作為默認值;

c). 查詢數據庫表mysqlops_enum的數據

查詢枚舉類型數據庫表Mysqlops_enum所有的數據(注釋:兩個枚舉類型字段都是非NULL,所以截斷后的值為空格):

復制代碼 代碼示例:

root@localhost : test 11:23:24> SELECT * FROM Mysqlops_enum;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|? 1 | QA?????? | shanghai? |

|? 2 | NA?????? |?????????? |

|? 4 |????????? | hangzhou? |

|? 5 | DBA????? |?????????? |

|? 6 | DBA????? | shanghai? |

+----+----------+-----------+

5 rows in set (0.00 sec)

驗證枚舉類型字段存儲的是數據對應的序列編號,而不是真實的字符串值,且序列號是與枚舉類型字段值域列表中的順序有關:

復制代碼 代碼示例:

root@localhost : test 11:23:57> SELECT * FROM Mysqlops_enum WHERE Work_City=0;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|? 2 | NA?????? |?????????? |

|? 5 | DBA????? |?????????? |

+----+----------+-----------+

2 rows in set (0.00 sec)

root@localhost : test 01:22:08> SELECT * FROM Mysqlops_enum WHERE Work_City=1;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|? 1 | QA?????? | shanghai? |

|? 6 | DBA????? | shanghai? |

+----+----------+-----------+

2 rows in set (0.00 sec)

root@localhost : test 02:40:31> SELECT * FROM Mysqlops_enum WHERE Work_City=2;

Empty set (0.00 sec)

root@localhost : test 02:40:33> SELECT * FROM Mysqlops_enum WHERE Work_City=3;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|? 4 |????????? | hangzhou? |

+----+----------+-----------+

1 row in set (0.01 sec)

root@localhost : test 02:40:34> SELECT * FROM Mysqlops_enum WHERE Work_City=4;

Empty set (0.00 sec)

root@localhost : test 02:40:36> SELECT * FROM Mysqlops_enum WHERE Work_City=5;

Empty set (0.00 sec)

root@localhost : test 02:40:37> SELECT * FROM Mysqlops_enum WHERE Work_City=6;

Empty set (0.00 sec)

root@localhost : test 04:29:07> SELECT * FROM Mysqlops_enum WHERE Job_type=7;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|? 4 |????????? | hangzhou? |

+----+----------+-----------+

1 row in set (0.00 sec)

枚舉類型數據小結:

枚舉類型字段定義必須為確定的值,不能為變量、函數、表達式等;

若是向枚舉類型字段插入NULL值,且枚舉類型的字段定義為非NULL,SQL語句會執行失敗;

若是向枚舉類型字段插入,其枚舉列表值域中不存在的值,則會發生字段值的截斷,并且用空格字符串值替代,其存儲的序列編號為0;

若是枚舉類型字段定義的枚舉列表值域中存在空字符串值,該枚舉類型字段發生字段值截斷,則是會用空格值替代,但是其存儲的序列號與枚舉列表中存儲的序列號不同,也即參考事例所示:

復制代碼 代碼示例:

root@localhost : test 04:37:32> SELECT * FROM Mysqlops_enum WHERE Job_type=0;

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|? 8 |????????? | hangzhou? |

+----+----------+-----------+

1 row in set (0.00 sec)

root@localhost : test 04:37:35> SELECT * FROM Mysqlops_enum WHERE Job_type='';

+----+----------+-----------+

| ID | Job_type | Work_City |

+----+----------+-----------+

|? 4 |????????? | hangzhou? |

|? 8 |????????? | hangzhou? |

+----+----------+-----------+

2 rows in set (0.00 sec)

若是枚舉類型字段定義為非NULL,且沒有為該字段指定值的方式插入數據行,則把字段定義顯式申明的默認值作為字段默認值,沒有顯式申明則把枚舉列值域表中第一個值作為默認值;

若是枚舉類型字段允許插入NULL值,則NULL值對應存儲的序列號為NULL;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396568.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396568.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396568.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

# 異運算_小學數學運算三要點:定律、法則與順序(解析)

很多孩子的數學不好,尤其是女孩子。家長往往認定為數學不好就是孩子不擅長,能力差。其實未必,有的孩子數學不好的原因并不在于智商,而是沒有理解到數學的方法與邏輯,比如小學的運算中,很多孩子并沒有了解到…

如何實現一個教師與學生教學輔助平臺?

在軟件工程的學習過程中,我們要完成一個團體項目,關于個人教學輔助系統,對于這個,還有太多要學。對于如何實現其中的功能,我們會利用到html,css等語言來編寫網頁前端,同樣也會用到數據庫的知識。…

證明創建runnable實例和普通類時間一樣長

import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//證明創建runnable實例和普通類時間一樣長public class Test002 { private Concurre…

mysql數據庫維護_維護MySQL數據庫表

在本教程中,我們將向您介紹一些非常有用的語句,使您可以在MySQL中維護數據庫表。MySQL提供了幾個有用的語句,可以有效地維護數據庫表。 這些語句使您能夠分析,優化,檢查和修復數據庫表。分析表語句MySQL查詢優化器是My…

node-glob 正則表達式

https://github.com/isaacs/node-glob轉載于:https://www.cnblogs.com/chris-oil/p/6507368.html

機器學習筆記—再談廣義線性模型

前文從線性回歸和 Logistic 回歸引出廣義線性回歸的概念,很多人還是很困惑,不知道為什么突然來個廣義線性回歸,有什么用?只要知道連續值預測就用線性回歸、離散值預測就用 Logistic 回歸不就行了?還有一些概念之間的關…

python連接access數據庫odbc_對Python通過pypyodbc訪問Access數據庫的方法詳解

看書上通過ODBC訪問數據庫的案例,想實踐一下在Python 3.6.1中實現access2003數據庫的鏈接,但是在導入odbc模塊的時候出現了問題,后來查了一些資料就嘗試著使用pypyodbc,最后成功了。操作步驟:①安裝pypyodbc目前Python…

mysql異機備份

xx.xx..4.43----xx.xx..4.51 1、配置client通過密鑰來連接server 43機器上: /root/.ssh 目錄下執行 ssh-keygen -t rsa ls /root/.ssh會發現在/root/.ssh下生成一對密鑰id_dsa和id_dsa.pub,將生成的公鑰id_dsa.pub拷貝到server的/root/.ssh目錄下&#…

周末想找個地方敲代碼_觀看我們的代碼游戲,全周末直播

周末想找個地方敲代碼by freeCodeCamp通過freeCodeCamp 觀看我們的代碼游戲,全周末直播 (Watch us Code Games Live All Weekend) Note: this was originally published on our now-defunct blog on July 15, 2015.注意:該文章最初于2015年7月15日發布在…

5.7和5.6的mysql_mysql5.6和5.7的區別

展開全部MySQL 5.7 已經開發兩年了。相比 MySQL 5.6,有特別多的改進。團隊主要關注速度,性能據報告是比之前62616964757a686964616fe4b893e5b19e31333365643661版本提升了 2 至 3 倍。新特性列表,主要改進:提升 MySQL 安全性改進了…

01:數制轉換

01:數制轉換 查看提交統計提問總時間限制: 1000ms內存限制: 65536kB描述求任意兩個不同進制非負整數的轉換(2進制~16進制),所給整數在long所能表達的范圍之內。不同進制的表示符號為(0,1,...&am…

局域網只能看到一部分電腦_win10 網上鄰居看不到其它電腦、共享不了文件

最近電腦遇到了局域網文件共享的問題,Win 10 系統在網絡和共享中心里無法看到其他電腦,只能看到本機。確認共享已經打開后,通過查找最終解決。下面是解決流程。1.進入:控制面板 – 網絡和共享中心 – 更改高級共享設置&#xff0c…

javascript 開發_25個新JavaScript開發人員的免費資源

javascript 開發by freeCodeCamp通過freeCodeCamp 25個新JavaScript開發人員的免費資源 (25 Free Resources for New JavaScript Developers) We asked our campers to share their favorite free resources for new JavaScript developers on Camper News. The list includes…

mysql數據庫語法_MySQL數據庫語法(一)

MySQL數據庫語法數據庫管理系統(DBMS)的概述什么是DBMS:數據的倉庫方便查詢可存儲的數據量大保證數據的完整、一致安全可靠DBMS的發展:今天主流數據庫為關系型數據庫管理系統(RDBMS 使用表格存儲數據)常見DBMS:Orcale、MySQL、SQL Server、DB…

作業1---四則運算

一.需求分析: 除了整數以外,還要支持真分數的四則運算,真分數的運算,例如:1/6 1/8 7/24 運算符為 , ?, , 并且要求能處理用戶的輸入,并判斷對錯,打分統計正確率。 要求能處理用戶輸入的真分…

python有序數組中刪除元素_python刷LeetCode:26. 刪除排序數組中的重復項

題目描述:給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素只出現一次,返回移除后數組的新長度。不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。示例 1:給定數組…

mysql數據庫修改數據庫名稱_MySQL數據庫之MySQL 修改數據庫名稱的一個新奇方法...

本文主要向大家介紹了MySQL數據庫之MySQL 修改數據庫名稱的一個新奇方法 ,通過具體的內容向大家展現,希望對大家學習MySQL數據庫有所幫助。MySQL在5.1引入了一個rename database操作,但在MySQL5.1.23后又不支持這個命令。可以說是一個實驗性的…

Lesson 001 —— 數據

Lesson 001 —— 數據 數據(data)是事實或觀察的結果,是對客觀事物的邏輯歸納,是用于表示客觀事物的未經加工的原始素材。數據是信息的表現形式和載體,可以使符號、文字、數字、語音、圖像、視頻等。 進制 進制也就是進…

工作記錄四-etcd與flanneld

######################### etcd用來做flannld的數據中心,記錄flannld各主機子網的配置## flannld使各容器實例處于同一子網內,可以相互訪問####################### ### 一、etcd安裝及使用## 1. 下載編譯二進制包git clone https://github.com/coreos…

C#獲取剛插入的數據的id

在開發程序中我們經常會遇到兩個表或多個表關聯同時插入數據的需求。 那么我們剛給主表插入一條數據,接著給副表插入數據時其中一個字段要存儲與主表關聯的id,那么我們該怎么獲取剛插入的那條數據的id呢? insert infor values(,) ;SELECT Ide…