Board logo

標題: 7-4 建立資料表(7-4-1 資料表的結構) [打印本頁]

作者: 小誌    時間: 2011-4-20 09:03     標題: 7-4 建立資料表(7-4-1 資料表的結構)

7-4   建立資料表
資料庫只是一個儲存資料的空間,要如何讓儲存於其中的資料能格式化分門別類的放置?那就必須透過資料表「Table」來處理了,例如學生的聯絡資料存放在「學生通訊錄」資料表、客戶的訂單資料存放在「訂單」資料表中,將不同類別的資料集中放置於不同的資料表裡加以管理!

7-4-1 資料表的結構資料表中有兩項基礎的單元:欄位(Column)與列(Row),欄位用以儲存不同性質的資料,例如學號、姓名…等,而每一列中的各個欄位則構成一筆資料記錄(Record):
[attach]5612[/attach]
圖7-30  欄位與資料記錄。
作者: 小誌    時間: 2011-4-20 09:11

要資料表能夠存放資料,首先要定義資料表的規格,所謂的規格就是決定資料表中有幾個存放資料的欄位,還有這些欄位存放資料時的資料型態、資料長度…等限制規定。

欄位的命名
每張資料表可有多個欄位,每個欄位負責存放不同類型的資料,為了辨識這些欄位,所以必須為資料表中的欄位訂立一個識別名稱,命名基本原則如下:
1.同一張資料表中的欄位名稱不可重複。
2.欄位名稱可用中文(任何字符,除了「/」或「.」)。
3.欄位名稱最多為64個字元。
4.欄位名稱不得為MySQL內的Transact-SQL保留字(保留字列表詳見附錄)。
作者: 小誌    時間: 2011-4-20 09:15

欄位的資料型態與儲存大小
在MySQL 中提供了多種資料型態:

1.數值型態(Numeric Types)
資料類型儲存大小資料範圍
TINYINT[(M)]1位元組有正負號為 -128 to 127正負號為 0 to 255
SMALLINT[(M)]2位元組有正負號為 -32768 to 32767無正負號為 0 to 65535
MEDIUMINT[(M)]3位元組有正負號為 -8388608 to 8388607無正負號為 0 to 16777215
INT[(M)]4位元組有正負號為 -2147483648 to 2147483647無正負號為 0 to 4294967295
INTERGER[(M)]4位元組與INT ODBC 兼容使用
BIGINT[(M)]8位元組有正負號為 -9223372036854775808 to 9223372036854775807無正負號為 0 to 18446744073709551615
FLOAT[(M,D)]
PRECISION
(4):4位元組(8):8位元組FLOAT(4)->FLOAT(單精準)
FLOAT(8)->DOUBLE(雙精準)
FLOAT[(M,D)]4位元組-3.402823466E+38 to -1.175494351E-38及1.175494351E-38 to 3.402823466E+38
DOUBLE[(M,D)]8位元組-1.7976931348623157E+308 to -2.2250738585072014E-308
2.2250738585072014E-308 to 1.7976931348623157E+308
DOUBLE[(M,D)]
PRECISION
8位元組同DOUBLE
REAL[(M,D)]8位元組同DOUBLE
DECIMA[(m,d)]X位元組最大值同DOUBLE 實際範圍要看m及d
NUMERIC[(m,d)]同DECIMAL同DECIMAL


上表中字母代號意義:

作者: 小誌    時間: 2011-4-20 09:19

2.字串型態(String Types)

資料型態

儲存大小

資料範圍

CHAR (M)

M 個位元組

1<=M<=255

M為指定的資料長度

M由1到255字元

VARCHAR (M)

L+1 個位元組

L<=M1<=M<=255

資料長度<=M
M由1到255字元

TINYTEXT、TINYBLOB

L+1個位元組

L<2^8

最大長度255字元(2^8-1)

TEXT、 BLOB

L+2個位元組

L<2^16

最大長度65535字元(2^16-1)

MEDIUMTEXT、MEDIUMBLOB

L+3個位元組

L<2^24

最大長度16777215字元(2^24-1)

LONGTEXT、LONGBLOB

L+4個位元組

L<2^32

最大長度4294967295字元(2^32-1)

ENUM

1 or 2個位元組

最大有65535種值

SET

1,2,3 to 8 byte

最大有64個值



Char(M):用來儲存固定長度且非Unicode的字元資料,一般用來儲存固定長度的資料,例如身分證字號,設定為Char(M)的欄位其使用的空間大小就是M個位元組,當輸入的資料長度未達指定的M個位元組時,將會在資料後面補上空白字元(Space)直到該欄位設定的最大長度,當值被檢索時,空格尾部(資料後面補上的空白字元)會被刪除;Char值會根據預設字元集以大小寫不區分的方式進行排序和比較。

varChar(M):用來儲存非固定長度且非Unicode的字元資料,設定為Char(n)的欄位其使用的空間大小並非就是M個位元組,使用的空間大小視輸入的資料長度而,當輸入的資料長度未達指定的M個位元組時,不會在資料後面補上空白字元(Space),而當輸入的資料長度大於指定的M個位元組時,則多餘的部份將被截除;varChar的長度為實際資料長度外加一個位元組記錄長度;當值被檢索時,空格尾部(資料後面補上的空白字元)會被刪除;varChar值會根據預設字元集以大小寫不區分的方式進行排序和比較。

透過下表將可發現Char、varChar兩種類型的列的不同:

資料

CHAR(5)

需求

VARCHAR(5)

需求

''

'
'

5 個位元組

''

1 位元組

'XY'

'XY
'

5 個位元組

'XY'

3 個位元組

'XYZAS'

'XYZAS'

5 個位元組

'XYZAS'

6 個位元組

'abcdefgh'

'abcde'

5 個位元組

'abcde'

6 個位元組



提示!!
「Unicode(萬國字元編碼)」:就是每一個字元都是以2個位元組的型式表示,不管是繁體中文字、英文字母、簡體中文字…等,都視為一個字元,存放資料的空間一律給予2個位元組的長度。
作者: 小誌    時間: 2011-4-20 09:21

3.日期時間型態(Date and Time Types)

資料型態

儲存大小

資料範圍

DATE

3位元組

'1000-01-01' TO '9999-12-31'

格式為YYYY-MM-DD

DATETIME

8位元組

'1000-01-01 00:00:00' 到

'9999-12-31 23:59:59'

TIMESTAMP

4位元組

'1970-01-01 00:00:00' 到 2037年

TIME

3位元組

'-838:59:59' 到 '838:59:59'格式為HH:MM:SS

YEAR

1位元組

1901到2155及0000

格式為YYYY



DATE:用在僅需要日期值時,沒有時間部分,以'YYYY-MM-DD'格式顯示DATE值,支援的範圍是'1000-01-01'到'9999-12-31'。
DATETIME:用在需要同時包含日期和時間資訊的值時,以'YYYY-MM-DD HH:MM:SS'格式顯示DATETIME值,支援的範圍是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
TIMESTAMP:自動提取系統當前的日期和時間標記,特別適用INSERT或UPDATE時資料記錄的操作,TIMESTAMP值可以從1970的某時的開始一直到2037年,精度為一秒,其值以數字顯示。
TIMESTAMP值取決於顯示長度的設定,若要顯示完整的TIMESTAMP格式,則顯示長度的設定應設為14位,長度的設定與TIMESTAMP格式對照如下表:

TIMESTAMP長度設定

顯示格式

TIMESTAMP(14)

YYYYMMDDHHMMSS

TIMESTAMP(12)

YYMMDDHHMMSS

TIMESTAMP(10)

YYMMDDHHMM

TIMESTAMP(8)

YYYYMMDD

TIMESTAMP(6)

YYMMDD

TIMESTAMP(4)

YYMM

TIMESTAMP(2)

YY



提示!!
不合法的(非符合標準格式)DATETIME、DATE或TIMESTAMP值將會被變換到適當類型的“零”值('0000-00-00 00:00:00', '0000-00-00'或00000000000000)。


TIME:以'HH:MM:SS'為標準顯示格式,TIME值的範圍可以從'-838:59:59'到'838:59:59',小時部分因為可以用在表示在2個事件之間經過的時間或時間間隔,所以小時部分可以是比24個小時大或是負值。


YEAR:以YYYY格式顯示YEAR值,其範圍是1901到2155。YEAR值能用多種格式指定:





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)