iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0
AI & Data

作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學系列 第 4

第四日: 創建資料表的眉眉角角,認識MySQL 資料型別(Type)

今天要來了解創建資料表的語法,
創建資料表會比資料庫複雜一些,
除了寫資料表名稱以外,
還要敘述資料表要有什麼欄位,
這些欄位又各自有什麼限制(Constraint)。

我們已經創建的學生資料表裡面有編號、生日、名字、性別等等的欄位,
假設我們都不規定欄位裡面要填什麼,
直接和學生說:「填一下你的生日!」,
有的學生填「八月3日」,有的學生填「810803」,有的填「1992.08.03」,
也有可能有看錯行的學生填寫「男」,是不是會亂七八糟?

為了減少這種亂七八糟的情況,
我們在創建資料表欄位時就要規定欄位的「型別(Type)」以及給予一些「限制(Constraint)」,

  • 「型別(Type)」是規定要填寫的內容,例如只能填寫時間或是只能填寫數字,在範例中是欄位名稱後面的INT、DATE等等,
  • 「限制(Constraint)」是對資料的限制,像是規定哪些欄位必填、哪些欄位內容不能重複,在範例中是型別後面的NOT NULL、AUTO_INCREMENT等等,

接下來會介紹在MySQL中超級常用的型別,引言中的小解釋如果看不懂沒關係
剛開始學先知道最基礎的就好了,熟悉資料庫後,慢慢補這些知識也不遲。

 --CREATE Table範例

CREATE Table student(
--欄位名稱   --型別(Type)   --限制(Constraint)               
id      	INT             AUTO_INCREMENT,  --編號
birth_date  DATE            NOT NULL,	--生日
full_name  	VARCHAR(50)     NOT NULL,	--名字
gender      VARCHAR(50)     NOT NULL,	--性別
class       VARCHAR(100)  				--課程
start_date  DATE            NOT NULL,	--開始日期

--限制(Constraint)
PRIMARY KEY (id)
) ;


MySQL常用型別(Type)

一般常用的型別是這四大類型:

  • 數值:數字,包含整數、浮點數(有小數)的數字等等
  • 字串:文字
  • 時間:各種格式的日期和時間
  • 布林:布林值是TRUE或是FALSE,簡單來說,輸入1,代表TRUE,輸入0,代表FALSE。

MySQL沒有布林型別,但可以輸入BOOLEAN,MySQL替換成TINYINT(1)。
對TINYINT(1)而言,輸入0就是FALSE,其餘數字都是TRUE。

  • 數值:數字,包含整數、浮點數(有小數)的數字等等

    • INT 整數
    • DECIMAL 小數

可以表示小數的型別有很多種,像是float,double,但這些型別儲存的小數是近似值,以後操作時有機會造成謎一般的結果(廣義上的BUG),
而DECIMAL是儲存精準的數值,雖然所占空間比較大,但對新手來說比較友善,如果需要儲存小數,推薦使用DECIMAL!

  • 字串:文字

    • NVARCHAR(10) 括號中間的數字是長度規定,使用NVARCHAR的話,無論是否英文字,一個字的長度就是2 Byte,所以10的意思是這欄最多只能填五個字,

 字串的型別常見的四種:
+ CHAR  定長 英文 1 Byte,非英文2 Byte
+ VARCHAR   變長 英文 1 Byte,非英文2 Byte
+ NCHAR    定長 無論中英文都是2 Byte
+ NVARCHAR  變長 無論中英文都是2 Byte

有N的代表Unicode,無論是否英文都是用2 Byte儲存;
沒有N的話,就照英文1Byte,非英文2 Byte,但沒有N卻中英文混和容易出問題,所以如果沒辦法肯定欄位只會有英文的話,還是用有N的吧!
有VAR的代表是變長,輸入多少字,就占多少儲存空間;
沒有VAR的代表是定長,假設是NCHAR(10),無論你輸入多少字,都會占10 Bytes,你輸入兩個中文,系統會幫你補六個空白;

  • 時間:各種格式的日期和時間

    • DATE 日期,年月日,例如:"2020-09-18"
    • TIME 時間,小時分秒,例如:"20:00:53"
    • DATETIME 日期和時間,例如:"2020-09-18 20:00:53"

全部型別都看完以後,再對照我們創建的欄位和型別:
編號用整數型別、生日用日期型別等等,是不是又更了解這個語法了呢?

 --CREATE Table '資料表名稱'(資料欄位)

CREATE Table student(
--欄位名稱   --型別(Type)   --限制(Constraint)               
id      	INT             AUTO_INCREMENT,  --編號
birth_date  DATE            NOT NULL,	--生日
full_name  	VARCHAR(50)     NOT NULL,	--名字
gender      VARCHAR(50)     NOT NULL,	--性別
class       VARCHAR(100)  				--課程
start_date  DATE            NOT NULL,	--開始日期

--限制(Constraint)
PRIMARY KEY (id)
) ;



上一篇
第三日: CRUD初體驗,操作MySQL資料庫
下一篇
第五日: 資料限制(Constraint)之一天到晚看到的UNIQUE和NOT NULL
系列文
作者超囉嗦,但一天只要十分鐘的MYSQL真.新手教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言