SQL 的資料型別 (Data Types)

SQL 基本上有下列幾種資料型別,我們必需了解儲存各類型資料值要分別採用何種資料型別欄位以便進行資料庫設計。

  • 數值資料 (Numeric Types) - 11, 2.5492, -91
  • 字串資料 (String Types) - '學習 SQL 語言'
  • 空值 (NULL) - (欄位為空)
  • 布林值 (Boolean) - true / false

數值資料 (Numeric Data)

SQL 的數值型態有 integer, float, money 等,使用數值資料有一個好處就是你能搭配內建的數值函數來做資料處理,例如 SUM() 函數即可直接獲得該數值欄位的總合。

字串(元)資料 (Character & Strings Data)

儲存字元或符號之資料型別。

日期/時間資料 (Date Data)

用來記錄日期/時間的資料型別,有 date, time, timestamp 等。

布林值 (Boolean Data)

true/false, Yes/No, 1/0。

空值 (NULL Data)

空值,沒有資料存在於欄位。通常在建立資料表時,你可以設定欄位是否允許空值。

CREATE TABLE customer (
  C_id INT PRIMARY KEY,
  Name VARCHAR(10) NOT NULL,
  Address VARCHAR(255) NULL,
  Phone VARCHAR(10) NULL
);

NULL 值和一個空字串 '' 是有不一樣意涵的。例如,下列 SQL 敘述句:

INSERT INTO customer (phone) VALUES (NULL);
INSERT INTO customer (phone) VALUES ('');

其中第一個敘述句的意味著不知道電話號碼;而第二個則是意味著沒有電話。

在大多的資料庫中,你不能索引允許有 NULL 值的欄位。你必須聲明要索引的欄位為 NOT NULL,此外,你也不能插入 NULL 到具有索引的欄位中。

另外值得注意的是,NULL 這字面常量 (Literal) 在某些特殊情形下使用代表著不同含意:

  1. 若你將 NULL 插入資料表中的 TIMESTAMP 欄位,則代表目前的日期和時間。
  2. 若你將 NULL 插入一個 AUTO_INCREMENT 欄位,則代表目前順序中的下一個號碼。