我們要把現實世界中的各種信息轉換成計算機能理解的東西,這些轉換後的信息就形成了數據。例如,某人的出生日期是“1987年5月23日”,他的身高是170厘米,等等。數據不僅包括數字、字母、文字和其他特殊字符組成的文本形式的數據,而且還包括圖形、圖像、動畫、影像、聲音等多媒體數據。但使用最多、最基本的仍然是文本數據。
1. MySQL的數據類型
在MySQL中有如下幾種數據類型:
(1)數值型
數值是諸如32 或153.4 這樣的值。MySQL 支持科學表示法,科學表示法由整數或浮點數後跟“e”或“E”、一個符號(“+”或“-”)和一個整數指數來表示。1.24E+12 和23.47e-1 都是合法的科學表示法表示的數。而1.24E12 不是合法的,因為指數前的符號未給出。
浮點數由整數部分、一個小數點和小數部分組成。整數部分和小數部分可以分別為空,但不能同時為空。
數值前可放一個負號“-”以表示負值。
(2)字符(串)型
字符型(也叫字符串型,簡稱串)是諸如“Hello, world!”或“一個饅頭引起的血案”這樣的值,或者是電話號碼87398413這樣的值。既可用單引號也可用雙引號將串值括起來。
初學者往往分不清數值87398143和字符串87398143的區別。都是數字啊,怎麼一個要用數值型,一個要用字符型呢?關鍵就在於:數值型的87398143是要參與計算的,比如它是金融中的一個貨款總額;而字符型的87398143是不參與計算的,只是表示電話號碼,這樣的還有街道號碼、門牌號碼等等,它們都不參與計算。
(3)日期和時間型
日期和時間是一些諸如“2006-07-12”或“12:30:43”這樣的值。MySQL還支持日期/時間的組合,如“2006-07-12 12:30:43”。
(4)NULL值
NULL表示未知值。比如填寫表格中通訊地址不清楚留空不填寫,這就是NULL值。
我們用Create Table語句創建一個表(參看前面的章節),這個表中包含列的定義。例如我們在前面創建了一個joke表,這個表中有content和writer兩個列:
定義一個列的語法如下:
其中列名由col_name 給出。列名可最多包含64個字符,字符包括字母、數字、下劃線及美元符號。列名可以名字中合法的任何符號(包括數字)開頭。但列名不能完全由數字組成,因為那樣可能使其與數據分不開。MySQL保留諸如SELECT、DELETE和CREATE這樣的詞,這些詞不能用做列名,但是函數名(如POS 和MIN)是可以使用的。
列類型col_type表示列可存儲的特定值。列類型說明符還能表示存放在列中的值的最大長度。對於某些類型,可用一個數值明確地說明其長度。而另外一些值,其長度由類型名蘊含。例如,CHAR(10) 明確指定了10個字符的長度,而TINYBLOB值隱含最大長度為255個字符。有的類型說明符允許指定最大的顯示寬度(即顯示值時使用多少個字符)。浮點類型允許指定小數位數,所以能控制浮點數的精度值為多少。
可以在列類型之後指定可選的類型說明屬性,以及指定更多的常見屬性。屬性起修飾類型的作用,並更改其處理列值的方式,屬性有以下類型:
(1)專用屬性用於指定列。例如,UNSIGNED 屬性只針對整型,而BINARY屬性只用於CHAR 和VARCHAR。
(2)通用屬性除少數列之外可用於任意列。可以指定NULL 或NOT NULL 以表示某個列是否能夠存放NULL。還可以用DEFAULT,def_value 來表示在創建一個新行但未明確給出該列的值時,該列可賦予值def_value。def_value 必須為一個常量;它不能是表達式,也不能引用其他列。不能對BLOB 或TEXT 列指定缺省值。
如果想給出多個列的專用屬性,可按任意順序指定它們,只要它們跟在列類型之後、通用屬性之前即可。類似地,如果需要給出多個通用屬性,也可按任意順序給出它們,只要將它們放在列類型和可能給出的列專用屬性之後即可。
2. MySQL的列(字段)類型
數據庫中的每個表都是由一個或多個列(字段)構成的。在用CREATE TABLE語