最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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關鍵字,定義成無符號的類型,那么對應的取值范圍就要翻翻了,比如: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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • MySQL?半同步復制的實現(xiàn)

    MySQL?半同步復制的實現(xiàn)

    半同步復制是MySQL復制的一種形式,它結(jié)合了異步復制和同步復制的特性,本文主要介紹了?MySQL?半同步復制的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • Centos7下安裝MySQL8.0.23的步驟(小白入門級別)

    Centos7下安裝MySQL8.0.23的步驟(小白入門級別)

    這篇文章主要介紹了Centos7下安裝MySQL8.0.23的步驟(小白入門級別),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Mysql兩表聯(lián)合查詢的四種情況總結(jié)

    Mysql兩表聯(lián)合查詢的四種情況總結(jié)

    今天小編就為大家分享一篇關于Mysql兩表聯(lián)合查詢的四種情況總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • MySQL存儲函數(shù)以及觸發(fā)器詳解

    MySQL存儲函數(shù)以及觸發(fā)器詳解

    這篇文章詳細給大家介紹了MySQL-SQL存儲函數(shù)以及觸發(fā)器,文中有詳細的代碼示例,對我們學習MySQL有一定的幫助,感興趣的朋友可以參考閱讀下
    2023-06-06
  • 詳解MySQL拼接函數(shù)CONCAT的使用心得

    詳解MySQL拼接函數(shù)CONCAT的使用心得

    這篇文章主要介紹了詳解MySQL拼接函數(shù)CONCAT的使用心得,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 解決Mysql同步到ES時date和time字段類型轉(zhuǎn)換問題

    解決Mysql同步到ES時date和time字段類型轉(zhuǎn)換問題

    這篇文章主要介紹了Mysql同步到ES時date和time字段類型轉(zhuǎn)換問題解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • MySQL數(shù)據(jù)庫大小寫敏感的問題

    MySQL數(shù)據(jù)庫大小寫敏感的問題

    今天小編就為大家分享一篇關于MySQL數(shù)據(jù)庫大小寫敏感的問題,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Mysql 忘記root密碼和修改root密碼的解決方法(小結(jié))

    Mysql 忘記root密碼和修改root密碼的解決方法(小結(jié))

    這篇文章主要介紹了Mysql 忘記root密碼和修改root密碼的解決方法(小結(jié)),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-12-12
  • mysql數(shù)據(jù)庫中g(shù)etshell的方式總結(jié)

    mysql數(shù)據(jù)庫中g(shù)etshell的方式總結(jié)

    MySQL版本大于5.0,MySQL 5.0版本以上會創(chuàng)建日志文件,我們通過修改日志文件的全局變量,就可以GetSHELL,下面這篇文章主要給大家介紹了關于mysql數(shù)據(jù)庫中g(shù)etshell的方式,需要的朋友可以參考下
    2022-07-07
  • MySQL四種備份表的實現(xiàn)方式

    MySQL四種備份表的實現(xiàn)方式

    本文主要介紹了MySQL四種備份表的實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02

最新評論

天水市| 聂拉木县| 韶山市| 新巴尔虎右旗| 高碑店市| 扎鲁特旗| 岚皋县| 边坝县| 东海县| 东阿县| 邓州市| 上饶市| 唐山市| 涿州市| 屯留县| 铜梁县| 会东县| 涿州市| 望奎县| 灵川县| 北辰区| 龙泉市| 许昌市| 乐陵市| 无棣县| 民权县| 扶绥县| 岳池县| 金溪县| 丰顺县| 惠来县| 台湾省| 扎赉特旗| 剑阁县| 辰溪县| 平罗县| 上林县| 美姑县| 云浮市| 南昌市| 新蔡县|