返回列表 上一主題 發帖

7-4 建立資料表(7-4-1 資料表的結構)

7-4 建立資料表(7-4-1 資料表的結構)

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

7-4-1 資料表的結構資料表中有兩項基礎的單元:欄位(Column)與列(Row),欄位用以儲存不同性質的資料,例如學號、姓名…等,而每一列中的各個欄位則構成一筆資料記錄(Record):

圖7-30  欄位與資料記錄。
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

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

欄位的命名
每張資料表可有多個欄位,每個欄位負責存放不同類型的資料,為了辨識這些欄位,所以必須為資料表中的欄位訂立一個識別名稱,命名基本原則如下:
1.同一張資料表中的欄位名稱不可重複。
2.欄位名稱可用中文(任何字符,除了「/」或「.」)。
3.欄位名稱最多為64個字元。
4.欄位名稱不得為MySQL內的Transact-SQL保留字(保留字列表詳見附錄)。
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

欄位的資料型態與儲存大小
在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


上表中字母代號意義:

  • M:最大的顯示尺寸,最大的值為 255 。
  • D:適用於浮點類型,用於指出跟隨在十進制小數點後的數碼的數量,最大值是30,但不可大於M-2。
  • BIGINT[(M)]:當兩個參數是INTEGER值時,其+、-和*(加、減、乘法)將使用BIGINT運算;所有算術運算應用有符號的BIGINT或DOUBLE值完成,除了函數外,不應使用大於9223372036854775807(63位)的有符號BIGINT。
  • FLOAT[(M,D)]:一個單精準浮點數值,不能沒有正負號。允許的值是-3.402823466E+38到-1.175494351E-38,0 和1.175494351E-38到3.402823466E+38,M是顯示寬度而D是小數的位數。
  • DOUBLE[(M,D)] :一個倍精準浮點數值不能無符號,允許的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到1.7976931348623157E+308,M是顯示寬度而D是小數位數。
  • Decimal、Numeric:基本上,此兩種資料型態是一樣的,最大有效位數值為38,應用上應該使用Decimal,因為Numeric是為了向前相容的原因而存在。

    • m:指定小數點左方及右方可儲存的十進位數總和的上限,就是指整數與小數的總合位數。
    • d:指定小數點右方可儲存的十進位個數總和的上限,即指定小數點後的小數位數,其值可介於0~M之間。
  • Decimal與Numeric資料型態的欄位不需指定長度,其使用空間視精確度高低自動調整。
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

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個位元組的長度。
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

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個小時大或是負值。

  • TIME值允許使用任何標點符號作為時間部分的分隔符號,例如,'10:11:12'和'10.11.12'是相同的。
  • 沒有時間部分分隔符號'HHMMSS'的格式,亦可成為TIME值,例如'101112'將被視為'10:11:12',不過若是如'108612'這樣的值將是不合法的(具有無意義的分鐘部分),因此將被視為'00:00:00'。
  • 若為HHMMSS格式的一組數字,亦可視為一個TIME值。例如,112415將被視為'11:24:15'。


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

  • 範圍在'1901'到'2155'的一個4位字串。
  • 範圍在1901到2155的一個4位數字。
  • 範圍在'00'到'99'的一個2位字串,在'00'到'69'範圍的值被變換到在2000到2069範圍的YEAR值,'70'到'99'1970範圍的值被變換到1999的YEAR值。
  • 範圍在'00'到'99'的一個2位數字,在'00'到'69'範圍的值被變換到在2000到2069範圍的YEAR值,'70'到'99'1970範圍的值被變換到1999的YEAR值,但不能直接指定零作為一個數字並且把它解釋為2000。
  • 可接受函數的回傳值,例如NOW()函數。
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

        靜思自在 : 太陽光大、父母恩大、君子量大,小人氣大。
返回列表 上一主題