2019年1月12日 星期六

DW_PHP_AJAX_CH5 SQL語言與資料庫入門_(1)資料庫的使用_如何建立資料表(上)

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

<<資料表的結構>>

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

<<<欄位的命名>>>

每張資料表可有多個欄位, 每個欄位負責存放不同類型的資料, 為了辨識這些欄位, 所以必須為資料表中的欄位訂立一個識別名稱, 命名基本原則如下:

  • 同一張資料表中的欄位名稱不可重複。
  • 欄位名稱可用中文(任何字符, 除了『/』、『/』或『.』)。
  • 欄位名稱最多為64個字元。
  • 欄位名稱不得為MySQL內的Transact-SQL保留字。

<<<欄位的資料型態與儲存大小>>>

在MySQL 中提供了多種資料型態:
<<<<數值型態(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-381.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 實際範圍要看md
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是小數位數。

<<<<字串型態(String Types)>>>>
資料型態
儲存大小
資料範圍
CHAR (M)
M 個位元組
1<=M<=255
M為指定的資料長度
M1255字元
VARCHAR (M)
L+1 個位元組
L<=M1<=M<=255
資料長度<=M, M1255字元
TINYTEXTTINYBLOB
L+1個位元組
L<2^8
最大長度255字元(2^8-1)
TEXT BLOB
L+2個位元組
L<2^16
最大長度65535字元(2^16-1)
MEDIUMTEXTMEDIUMBLOB
L+3個位元組
L<2^24
最大長度16777215字元(2^24-1)
LONGTEXTLONGBLOB
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值會根據預設字元集以大小寫不區分的方式進行排序和比較。
<<<<日期時間型態(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位元組
190121550000
格式為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年, 精度為一秒, 其值以數字顯示。
  • 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()函數。

沒有留言:

張貼留言