欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL學習第六天 學習MySQL基本數(shù)據(jù)類型

 更新時間:2016年05月31日 15:37:21   作者:丿木呈廣予口貝  
MySQL學習第六天和大家一起學習MySQL基本數(shù)據(jù)類型,基本類型包括數(shù)值類型、日期和時間類型和字符串類型等,感興趣的小伙伴們可以參考一下

還記得上一篇學習的內(nèi)容嗎?不記得再看一看MySQL學習第五天 MySQL數(shù)據(jù)庫基本操作,溫故可以知新!

        數(shù)據(jù)類型是指列、存儲過程參數(shù)、表達式和局部變量的數(shù)據(jù)特征,它決定了數(shù)據(jù)的存儲方式,代表了不同的信息類型。MySQL中常用的的數(shù)據(jù)類型包括:數(shù)值類型、日期和時間類型和字符串類型等。

 一、數(shù)值類型

       MySQL支持所有標準SQL中的數(shù)值類型,其中包括嚴格數(shù)據(jù)類型(INTEGER、SMALLINT、DECIMAL、NUMBERIC),以及近似數(shù)值數(shù)據(jù)類型(FLOAT、REAL、DOUBLE、PRESISION),并在此基礎上進行擴展。擴展后增加了TINYINT、MEDIUMINT、BIGINT這3種長度不同的整形,并增加了BIT類型,用來存放位數(shù)據(jù)。

(1).整型

       在MySQL中支持的5個主要整數(shù)類型是TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。這些類型在很大程度上是相同的,只有它們存儲的值的大小是不相同的。

       MySQL以一個可選的顯示寬度指示器的形式對SQL標準進行擴展,這樣當從數(shù)據(jù)庫檢索一個值時,可以把這個值加長到指定的長度。例如,指定一個字段的類型為INT(6),就可以保證所包含數(shù)字少于 6 個的值從數(shù)據(jù)庫中檢索出來時能夠自動地用空格填充。需要注意的是,使用一個寬度指示器不會影響字段的大小和它可以存儲的值的范圍。萬一我們需要對一個字段存儲一個超出許可范圍的數(shù)字,MySQL會根據(jù)允許范圍最接近它的一端截短后再進行存儲。還有一個比較特別的地方是,MySQL會在不合規(guī)定的值插入表前自動修改為0。

       下面的表顯示了需要的每個整數(shù)類型的存儲和范圍:


       上面定義的都是有符號的,當然了,也可以加上UNSIGNED關(guān)鍵字,定義成無符號的類型,那么對應的取值范圍就要翻翻了,比如:TINYINT UNSIGNED的取值范圍為0~255。

       例如我們存儲人的年齡,就是使用TINYINT UNSIGNED:

CREATE TABBLE tb1( 
 age TINYINT UNSIGNED, 
); 

(2).浮點型

       MySQL支持的三個浮點類型是FLOAT、DOUBLEDECIMAL類型。FLOAT數(shù)值類型用于表示單精度浮點數(shù)值,而DOUBLE數(shù)值類型用于表示雙精度浮點數(shù)值。與整數(shù)一樣,這些類型也帶有附加參數(shù):一個顯示寬度指示器和一個小數(shù)點指示器。比如語句 FLOAT(7,3) 規(guī)定顯示的值不會超過7位數(shù)字,小數(shù)點后面帶有3位數(shù)字。對于小數(shù)點后面的位數(shù)超過允許范圍的值,MySQL會自動將它四舍五入為最接近它的值,再插入它。

       DECIMAL數(shù)據(jù)類型用于精度要求非常高的計算中,這種類型允許指定數(shù)值的精度和計數(shù)方法作為選擇參數(shù)。精度在這里指為這個值保存的有效數(shù)字的總個數(shù),而計數(shù)方法表示小數(shù)點后數(shù)字的位數(shù)。比如語句DECIMAL(7,3) 規(guī)定了存儲的值不會超過7位數(shù)字,并且小數(shù)點后不超過3位。

      下表給出了它們的存儲范圍:


       我在MySQL中建立了一個表,有一列為FLOAT(5, 3);做了以下試驗:

       1)插入123.45678,最后查詢得到的結(jié)果為99.999;

       2)插入123.456,最后查詢結(jié)果為99.999;

       3)插入12.34567,最后查詢結(jié)果為12.346;

       所以,在使用浮點型的時候,還是要注意陷阱的,要以插入數(shù)據(jù)庫中的實際結(jié)果為準。

       例如我們存儲工作人員的工資就是使用FLOAT(8,2) UNSIGNED:

CREATE TABBLE tb1( 
 salary FLOAT(8,2) UNSIGNED 
); 

二、日期時間類型

       在處理日期和時間類型的值時,MySQL帶有5個不同的數(shù)據(jù)類型可供選擇。它們可以被分成簡單的日期、時間類型,和混合日期、時間類型。根據(jù)要求的精度,子類型在每個分類型中都可以使用,并且MySQL帶有內(nèi)置功能可以把多樣化的輸入格式變?yōu)橐粋€標準格式。

       下表解釋了五種日期和時間類型:


1)、MySQL用DATE和YEAR類型存儲簡單的日期值,使用TIME類型存儲時間值。這些類型可以描述為字符串或不帶分隔符的整數(shù)序列。如果描述為字符串,DATE類型的值應該使用連字號作為分隔符分開,而TIME類型的值應該使用冒號作為分隔符分開。需要注意的是,沒有冒號分隔符的TIME類型值,將會被MySQL理解為持續(xù)的時間,而不是時間戳。

 2)、除了日期和時間數(shù)據(jù)類型,MySQL還支持DATEYIME和TIMESTAMP這兩種混合類型。它們可以把日期和時間作為單個的值進行存儲。這兩種類型通常用于自動存儲包含當前日期和時間的時間戳,并可在需要執(zhí)行大量數(shù)據(jù)庫事務和需要建立一個調(diào)試和審查用途的審計跟蹤的應用程序中發(fā)揮良好作用。如果我們對TIMESTAMP類型的字段沒有明確賦值,或是被賦與了NULL值。MySQL會自動使用系統(tǒng)當前的日期和時間來填充它。

       例如我們存儲添加用戶的出生年月就是使用:

CREATE TABBLE tb1( 
 brithday DATE 
); 

 三、字符串類型

       MySQL提供了6個基本的字符串類型,分別為CHAR、VARCHAR、TINYTEST、TEXT、MEDIUMTEXT、LONGTEXT六種字符串類型??梢源鎯Φ姆秶鷱暮唵蔚囊粋€字符到巨大的文本塊或二進制字符串數(shù)據(jù)。

      下標解釋了六種基本字符串類型:


1)、CHAR(n)和VARCHAR(n)中括號中n代表字符的個數(shù),并不代表字節(jié)個數(shù),所以當使用了中文的時候(UTF8)意味著可插入m個中文,但是實際會占用m*3個字節(jié)。

2)、同時CHAR和VARCHAR最大的區(qū)別就在于CHAR不管實際VALUE都會占用n個字符的空間,而VARCHAR只會占用實際字符應該占用的空間+1,并且實際空間+1<=n。

3)、超過CHAR和VARCHAR的n設置后,字符串會被截斷。

4)、CHAR在存儲的時候會截斷尾部的空格,VARCHAR和TEXT不會。

5)、VARCHAR會使用1-3個字節(jié)來存儲長度,TEXT不會。

6)、CHAR類型用于定長字符串,并且必須在圓括號內(nèi)用一個大小修飾符來定義。這個大小修飾符的范圍從 0-255。比指定長度大的值將被截短,而比指定長度小的值將會用空格作填補。

       例如我們存儲登錄用戶的用戶名就是使用VARCHAR(20):

CREATE TABLE tb1( 
 username VARCHAR(20) 
); 

實例:

       我們現(xiàn)在來驗證上述四個字段是否能創(chuàng)建成功:

CREATE TABLE tb1 ( 
 username VARCHAR(20), 
 age TINYINT UNSIGNED, 
 salary FLOAT(8,2) UNSIGNED, 
 brithday DATE 
); 

       創(chuàng)建數(shù)據(jù)表tb1和查看數(shù)據(jù)表結(jié)構(gòu)的結(jié)果為:


       我們向數(shù)據(jù)表tb1中插入記錄:INSERT tb1 VALUES('Tom',22,5555.55,'1994-10-01'); 

       執(zhí)行的結(jié)果顯示為:


四、復合類型

  MySQL還支持兩種復合數(shù)據(jù)類型ENUM和SET,它們擴展了SQL規(guī)范。雖然這些類型在技術(shù)上是字符串類型,但是可以被視為不同的數(shù)據(jù)類型。一個ENUM類型只允許從一個集合中取得一個值;而SET類型允許從一個集合中取得任意多個值。

(1)ENUM類型       

ENUM(“member1″, "member2″, … “member65535″)

ENUM數(shù)據(jù)類型就是定義了一種枚舉,最多包含65535個不同的成員。當定義了一個ENUM的列時,該列的值限制為列定義中聲明的值。如果列聲明包含NULL屬性,則NULL將被認為是一個有效值,并且是默認值。如果聲明了NOT NULL,則列表的第一個成員是默認值。

ENUM類型因為只允許在集合中取得一個值,有點類似于單選項。在處理相互排拆的數(shù)據(jù)時容易讓人理解,比如人類的性別。ENUM類型字段可以從集合中取得一個值或使用NULL值,除此之外的輸入將會使MySQ在這個字段中插入一個空字符串。另外如果插入值的大小寫與集合中值的大小寫不匹配,MySQL會自動使用插入值的大小寫轉(zhuǎn)換成與集合中大小寫一致的值。

ENUM類型在系統(tǒng)內(nèi)部可以存儲為數(shù)字,并且從1開始用數(shù)字做索引。一個ENUM類型最多可以包含65536個元素,其中一個元素被MySQL保留,用來存儲錯誤現(xiàn)的值是合法輸入,除此之外其它任何輸入都將失敗。這說明通過搜索包含空字符串或?qū)獢?shù)字索引為0的行就可以很容易地找到錯誤記錄的位置。

 (2)SET類型

SET(“member", "member2″, … “member64″)

SET數(shù)據(jù)類型為指定一組預定義值中的零個或多個值提供了一種方法,這組值最多包括64個成員。值的選擇限制為列定義中聲明的值。

SET類型與ENUM類型相似但不相同。SET類型可以從預定義的集合中取得任意數(shù)量的值。并且與ENUM類型相同的是任何試圖在SET類型字段中插入非預定義的值都會使 MySQL插入一個空字符串。如果插入一個即有合法的元素又有非法的元素的記錄,MySQL將會保留合法的元素,除去非法的元素。

一個 SET 類型最多可以包含64項元素。在SET元素中值被存儲為一個分離的“位”序列,這些“位”表示與它相對應的元素。“位”是創(chuàng)建有序元素集合的一種簡單而有效的方式。并且它還去除了重復的元素,所以SET類型中不可能包含兩個相同的元素。希望從SET類型字段中找出非法的記錄只需查找包含空字符串或二進制值為0的行。

復合數(shù)據(jù)類型的例子我們會在以后的博文中使用到,這里不再進行舉例。

五、總結(jié)

       通過對每種數(shù)據(jù)類型的用途,物理存儲,表示范圍等有一個概要的了解。這樣在面對具體應用時,就可以根據(jù)相應的特來來選擇合適的數(shù)據(jù)類型,使得我們能夠爭取在滿足應用的基礎上,用較小的存儲代價換來較高的數(shù)據(jù)庫性能。

      選用數(shù)據(jù)類型的原則:

      1)選擇最小的可用的類型;

      2)從速度方面考慮,選擇固定的列  使用CHAR類型;

      3)從節(jié)省空間考慮,選擇動態(tài)的列,使用VARCHAR類型。

      高性能數(shù)據(jù)庫設計原則:

      第一步:大致確定字段的數(shù)據(jù)類型,數(shù)字,字符串,時間等,比較直觀。

      第二步:確定特定的類型,比如說 :數(shù)字里有TINYINT、SMALLINT、INT、LONGINT等,選擇最合適的一個(更小通常更好)

      第三步:如有必要,請為字段設置默認值。

      當然,索引優(yōu)化肯定是必不可少的,不過這屬于設計表完成之后的優(yōu)化范圍了。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • centos7環(huán)境下源碼安裝mysql5.7.16的方法詳解

    centos7環(huán)境下源碼安裝mysql5.7.16的方法詳解

    這篇文章主要介紹了centos7環(huán)境下源碼安裝mysql5.7.16的方法,詳細分析了centos7環(huán)境下MySQL安裝的相關(guān)步驟、操作命令、配置方法與注意事項,需要的朋友可以參考下
    2020-02-02
  • MySQL登錄時出現(xiàn) Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解決辦法

    MySQL登錄時出現(xiàn) Access denied for user ‘

    今天打開mysql的時候突然提示:Access denied for user 'root'@'localhost' (using password: YES) 在網(wǎng)上搜索了很多文章,本文就來做一下總結(jié),介紹了幾種場景的解決方法,感興趣的可以了解一下
    2024-03-03
  • SQL中的聯(lián)合索引和普通索引問題

    SQL中的聯(lián)合索引和普通索引問題

    這篇文章主要介紹了SQL中的聯(lián)合索引和普通索引問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • mysql 5.7.17 winx64解壓版安裝配置方法圖文教程

    mysql 5.7.17 winx64解壓版安裝配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql 5.7.17 winx64解壓版安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • MySQL提升大量數(shù)據(jù)查詢效率的優(yōu)化神器

    MySQL提升大量數(shù)據(jù)查詢效率的優(yōu)化神器

    這篇文章主要介紹了MySQL提升大量數(shù)據(jù)查詢效率的優(yōu)化神器,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別

    解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別

    本篇文章是對內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-07-07
  • MySQL/MariaDB的Root密碼重置教程

    MySQL/MariaDB的Root密碼重置教程

    這篇文章主要給大家介紹了關(guān)于MySQL/MariaDB的Root密碼重置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • MySQL數(shù)據(jù)庫安裝和Navicat for MySQL配合使用教程

    MySQL數(shù)據(jù)庫安裝和Navicat for MySQL配合使用教程

    MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle 旗下公司。這篇文章主要介紹了MySQL數(shù)據(jù)庫安裝和Navicat for MySQL配合使用,需要的朋友可以參考下
    2019-06-06
  • Mysql如何刪除數(shù)據(jù)庫表中的某一列

    Mysql如何刪除數(shù)據(jù)庫表中的某一列

    這篇文章主要介紹了Mysql如何刪除數(shù)據(jù)庫表中的某一列,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 細說MySQL死鎖與日志二三事

    細說MySQL死鎖與日志二三事

    這篇文章主要和大家一起聊一聊MySQL死鎖與日志二三事,實際業(yè)務當中如何快速的定位線上MySQL問題,修復異常?本文根據(jù)兩個實際case,分享下相關(guān)的經(jīng)驗與方法,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論