這堂課其實很適合當我們課程的起點啦。不過如果一開始就講這個,你們前面的任務跟課程可能會超無聊。如果你決定當一天工地工人,你會想從哪裡開始:先研究磚頭的型號和形狀,還是 爽開 30 分鐘塔吊?你懂我意思吧 :)
學生不是個要裝滿的容器,而是要點燃的火把(還不能燒掉!)我不是想把我知道的全都倒給你,而是想讓你覺得有趣。現在正是時候來認識資料型別啦。
在 PostgreSQL 裡,資料型別就是指定某個資料表欄位會存什麼類型的資訊。比如數字、文字或日期。這有點像你選收納盒:小盒子裝小東西,大盒子裝鞋子,透明盒子裝線,這樣一眼就知道東西在哪。
舉例:
- 如果你想存人的年齡,就該用數字型別。
- 如果要存名字,就要用文字型別。
- 要記錄註冊日期,當然就用日期型別最合理。
為什麼需要資料型別?
資料型別可以幫你:
- 限制輸入的資訊。比如你不能在預期是數字的地方塞進文字。
- 讓資料有結構。清楚知道每個欄位是什麼,查詢和分析都更簡單。
- 省資源。用對型別可以減少記憶體消耗。
- 保持精確度。像財務計算就需要固定小數點的數字。
給你一點靈感的例子
想像一下有個存學生資訊的資料表:
id |
name |
age |
enrollment_date |
|---|---|---|---|
| 1 | Otto Mars | 22 | 2023-01-15 |
| 2 | Anna Song | 19 | 2023-02-10 |
這裡 id 是唯一識別碼(數字),name 是文字,age 是年齡數字,enrollment_date 是學生註冊日期。這些資料都有不同的型別,因為它們描述的是物件的不同面向。
PostgreSQL 資料型別分類
PostgreSQL 在資料型別這塊超級彈性。下面是個簡單分類。
主要資料型別分類:
數字型別
- 用來存整數(像數量、識別碼)和有小數的數字(像金錢)。
- 例子:
INTEGER、NUMERIC、FLOAT。
文字型別
- 用來存文字和字串(像名字、地址)。
- 例子:
CHAR、VARCHAR、TEXT。
布林型別
- 用來存邏輯值
TRUE(真)或FALSE(假)。 - 例子:
BOOLEAN。
- 用來存邏輯值
日期與時間型別
- 用來存日期、時間或兩者的組合。
- 例子:
DATE、TIME、TIMESTAMP。
特殊型別
- 像唯一識別碼、JSON 物件、陣列等等。
- 例子:
UUID、JSONB、ARRAY。
PostgreSQL 資料型別的特色
PostgreSQL 支援超多內建型別,還可以自訂 custom(自訂)資料型別。這讓這套 DBMS 在處理複雜系統、需要特殊資料需求時超強大。
有趣的是,PostgreSQL 還能存地理資訊,甚至可以查「找出我附近 500 公尺內的咖啡廳」這種資料。這種需求就要用到特殊型別啦。
明確指定資料型別有什麼好處?
有時你可能覺得把所有欄位都設成文字型別很方便——反正文字什麼都能存。但這其實很糟糕!指定正確的資料型別可以:
讓查詢更簡單。 如果 PostgreSQL 知道欄位裡都是數字,像 SUM() 這種計算就會快很多。
避免出錯。 想像你不小心把「三十二」存進年齡欄位,原本應該是 32。這種錯誤超難抓的。
GO TO FULL VERSION