3、enum型別
enum是乙個字串物件,其值為表建立時在列規定中列舉的一列值。語法格式如下:
欄位名 enum(『值1』,『值2』...『值n』)
欄位名指將要定義的字段,值n指列舉列表中的第n個值。enum型別的字段在取值時,只能在指定的列舉列表中取值,而且一次只能取乙個。如果建立的成員中有空格時,其尾部的空格將自動被刪除。enum值在內部用整數表示,每個列舉值均有乙個索引:列表值所允許的成員值從1開始編號,mysql儲存的就是這個索引編號。列舉最多可以有65535個元素。
例如:定義enum型別的列(『first』,』second』,』third』),該列可以取的值和每個值的索引如下:
值 索引
null
null
first
second
third
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只能存放純文字檔案。
mysql自學完整 MySQL自學篇 MySQL
建立資料表 1 建立資料表的語法格式 資料表屬於資料庫,在建立資料表之前要使用 use 指定操作是在哪個資料庫中進行的,如果沒有選擇資料庫,將會出現 no database selected 的錯誤 建立資料表的語句為 create table 語法規則為 create table 欄位1 資料型別...
mysql自學完整 MySQL自學篇(八)
2 字串函式 1 計算字串字元數的函式和字串長度的函式 char length str 返回字串str所包含的字元個數。乙個多位元組字元字元算作乙個單字元 select char length date char length egg char length 中國 2 合併字串函式concat s1...
MySQL自學篇(五)
運算子 作用加法運算 減法運算 乘法運算 除法運算 求餘運算 運算子作用 等於安全的等於。可以用於判斷null 不等於小於等於 大於等於 is null 是否為空 is not null 是否不為空 least 返回最小值 gretest 最大值between and 兩個值之間 isnull 與i...