程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL自學篇(四)

MySQL自學篇(四)

編輯:MySQL綜合教程

MySQL自學篇(四)


3、ENUM類型

ENUM是一個字符串對象,其值為表創建時在列規定中枚舉的一列值。語法格式如下:

字段名 ENUM(‘值1’,‘值2’...‘值n’)

字段名指將要定義的字段,值n指枚舉列表中的第n個值。ENUM類型的字段在取值時,只能在指定的枚舉列表中取值,而且一次只能取一個。如果創建的成員中有空格時,其尾部的空格將自動被刪除。ENUM值在內部用整數表示,每個枚舉值均有一個索引:列表值所允許的成員值從1開始編號,MySQL存儲的就是這個索引編號。枚舉最多可以有65535個元素。

例如:定義ENUM類型的列(‘first’,’second’,’third’),該列可以取的值和每個值的索引如下:

索引

NULL

NULL

0

first

1

second

2

third

3

 

EUNM值依照列索引順序排列,並且空字符串排在非空字符串的前面,NULL值排在其他所有的枚舉值前。

范例:

創建表emp10,定義INT類型的score字段,ENUM類型的字段level,列表值為(‘excellent’,’good’,’bad’),向表emp10中插入數據。

create table emp10(score INT,level enum('excellent','good','bad'));

 

insert into emp10 values (70,'good'),(90,1),(80,2),(50,3),(100,'best');

出現提示語:Data truncated for column 'level' at row 5

修改SQL如下:

insert into emp10 values (70,'good'),(90,1),(80,2),(50,3);

4、SET類型

5、SET是一個字符串對象,可以有零或多個值。SET列最多可以有64個成員,其值為表創建時規定的一列值。指定包括多個SET成員的SET列值時,各個成員之間用逗號隔開。

語法格式如下:

SET(‘值1’,’值2’...’值n’)

SET值在內部用整數表示,列表中每一個值都有一個索引編號。當創建表時,SET成員的尾部空格將被自動還是拿出。但與ENUM類型不同的是,ENUM類型的字段只能從定義的列值中選擇一個值插入,而SET類型的列可以從定義的列值中選擇多個字符的聯合。

如果插入SET字段中列值有重復,MySQL將自動刪除重復的值;插入SET字段的值的順序不重要,MySQL會在存入數據庫時,按照定義的順序顯示;如果插入了不正確的值,默認會忽略這些值,並給出警告

范例

 

5、二進制類型

MySQL支持兩類字符型數據:文本字符串、二進制字符串。MySQL中的二進制數據類型有:BIT/BINARY/VARBINARY/TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB

 

如何選擇數據類型

1、整數和浮點數

如果不需要小數部分,則使用整數來保存數據;如果需要表示小數,則使用浮點數類型。對於浮點數據列,存入的數值會對該列定義的小數進行四捨五入。

 

2、浮點數和

浮點數FLOAT,DOUBLE相對於定點數DECIMAL的優勢在於:在長度一定的情況下,浮點數能表示更大的數據范圍。但是由於浮點數容易產生誤差,因此對精度要求比較高時,簡易使用DECIMAL來存儲。DECIMAL在MySQL中是以字符串存儲的,用於定義貨幣等對精度要求較高的數據,在數據遷移中,float(M,D)是非標准SQL定義,數據庫遷移可能會出現問題。最好不要這樣使用。另外,兩個浮點數進行減法和比較運算時,容易出現問題。因此在進行計算的時候,一定要小心,如果進行數值比較,最好使用DECIMAL類型

 

3、日期與時間類型

MySQL對於不同種類的日期和時間有很多的數據類型。如果質押記住年份,則可以使用YEAR類型即可;如果只記錄時間,只需使用TIME類型

如果需要同時記錄日期和時間可以使用TIMESTAMP或者DATETIME類型。由於TIMESTAMP列的取值范圍小於DATETIME的取值范圍,因此存儲范圍較大的日期最好使用DATETIME

TIMESTAMP也有一個DATETIME不具備的屬性,默認情況下,當插入一條記錄但沒有指定TIMESTAMP列值時,MySQL會把TIMESTAMP列設為房前時間。

 

4、CHAR和VARCHAR之間的特點和選擇

區別:

CHAR是固定字符串,VARCHAR是可變長度字符串。CHAR會自動刪除插入數據的尾部空格,VARCHAR不會刪除尾部空格

CHAR是固定長度,所以處理速度比VARCHAR快。但其缺點是浪費存儲空間。

存儲引擎對於選擇CHAR和VARCHAR的影響:

對於MyISAM存儲引擎,只好使用固定長度的數據列代替可變長度的數據列。這樣可以是整個表靜態化,插敘更快

 

對於InnoDB存儲引擎,使用可變長度的數據列,因為InnoDB數據表的存儲格式不區分固定長度和可變長度,因此使用CHAR不一定比使用VARCHAR好。但是使用VARCHAR可以節省空間。

 

5、ENUM和SET

ENUM只能取單個值,他的數據列表是一個枚舉集合。因此要從多個值中選取一個時,可以使用ENUM。

SET可以取得多個值。在需要多個值的時候,時候使用SET類型

 

 

6、BLOB和TEXT

 

BLOB是二進制字符串,TEXT是非二進制字符串。兩者都可以存放大容量的信息。BLOB主要用於存儲圖片、音頻等,TEXT只能存放純文本文件。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved