標籤:
3.2MySQL資料類型
3.2.1資料類型概述
3.2.2表定義裡的特殊列類型
3.2.3指定列的預設值
———————————————————————————————
3.2.1資料類型概述
MySQL數字類型包括整數,定點數,浮點數和位值。除bit外其他的資料類型可以帶有加號或減號,也可以不帶加號或減號。
類型名稱 含義tinyint 非常小的整數smallint 小整數mediumint 中等大小的整數int 標準的整數bigint 大整數decimal 定點數float 單精確度浮點數double 雙精確度浮點數bit 位域
字串可以容納任何內容,可以容納表示映像和聲音的位元據,可以按照大寫進行比較,也可以進行模式比對。
類型名稱 含義char 固定長度的非二進位字串varchar 可變長度的非二進位串binary 固定長度的二進位串varbinary 可變長度的二進位串tinyblob 非常小型的blob(二進位大對象)blob 小型blobmediumblob 中型bloblongblob 大型blobtinytext 非常小型的非二進位串text 小型非二進位串mediutext 中等大小的非二進位串longtext 大型非二進位串enum 枚舉集合set 集合(每個列取值可以為若干個集合元素)
時態類型:
MySQL提供的類型有:
日期與時間(合并或者分開表示)
時間戳記(專門記載某個行最近一次修改時間的類型)
類型名稱 含義date 日期值,格式為‘ccyy-mm-dd’time 時間值,格式為‘hh:mm:ss’datetime 日期加時間值,格式為‘ccyy-mm-dd hh:mm:ss’timestamp 時間戳記值,格式為‘ccyy-mm-dd hh:mm:ss’year 年份值,格式為ccyy或yy
分別表示:
cc yy mm dd hh mm ss 世紀、 年、 月 、 日 、 小時 、 分鐘 、秒
3.2.2表定義裡的特殊 列 類型
create table mytabl1( f float(10,4), c char (15) not null default ‘none‘ i tinyint unsigned null);
列定義的文法如下:
col_name col_type [type_attrs] [general_attrs]
col_type表示列類型,即表明這一列可以用來容納何種類型的值。
1.有些類型說明符會表明儲存在列裡的值所允許的最大長度(char(10))
2.有些類型說明符允許長度隱含在名稱裡(tinytext)
3.有些類型說明符允許你指定一個最大顯示寬度
4.對於定點類型和浮點類型,還可以指定有效位和小數位
在列的資料類型後面,除了指定多個通用屬性外,還可以指定一些類型特有的可選屬性。這些屬性的作用是對該類型做進一步的修飾和限定
1.所允許的特有類型取決於具體的資料類型 2.通用屬性可用於任何一種資料類型3.如果存在多個屬性,通常將資料類型特有的屬性放在通用屬性的前面
3.2.3指定列的預設值
除了blob與text類型、空間類型或者具有auto_increment屬性的列以外,
還可以指定default def_value 子句.用以表明建立新的行時,如果沒有顯示地指定某個值,該列將會被預設值 def_value
除了timestamp列和datetime列有限制以外,這裡的預設值def_value必須是一個常量。他不能為運算式,也不能引用其他列
如果沒有顯式包含default子句,且該列允許為null值,那麼其預設值為NULL
如果該列不允許為NULL值,也沒有default子句,這就會影響MySQL對列的處理:
1.如果沒有啟用SQL的strict 模式,這列將會被設定成其資料類型的隱含預設值。2.啟用SQLstrict 模式之後,如果表是事務性的,就會出現錯誤。這條語句會中止執行,然後復原。對於非事務性的表,如果這行是該語句插入的第一個行,那麼會出現一個錯誤,該語句中止執行,如果不是第一行,那麼可以選擇中止執行,或選擇把這列設定為它的隱含預設值,同時發出一條警告資訊
列的隱含預設值取決於它的資料類型。
1.對於數字列(不包含那些具有auto_increment屬性的列),其預設值為0. 對於auto_increment列,預設值是下一個列的列序號。2.對於大多數時態類型列,其預設值為該類型的“零”值 對於enum列,預設值為枚舉集裡的第一個元素, 對於set列,如果不允許NULL值,預設值將是一個空集不過它等價於空串。
跟我一起學習MySQL技術內幕(第五版):(第三章學習日記3)