MySQL TINYINT完整教學|範圍、用法與實際範例

1. MySQL的TINYINT是什麼?

在MySQL中,TINYINT是一種用來儲存非常小的整數的資料型別。TINYINT佔用1位元組(8位元)的記憶體,有符號時範圍是-128127,無符號時則是0255。TINYINT主要用於高效管理小數值或布林值。

TINYINT的特點

  • 記憶體效率:由於TINYINT僅佔1位元組,相較於其他整數型別(例如:INTBIGINT),可以節省更多記憶體。
  • 有符號與無符號:有符號情況下可處理負數,而使用無符號則能擴大正數的範圍。

TINYINT的使用範例

以下範例建立了一個使用TINYINT型別來管理小數值與旗標的資料表:

CREATE TABLE user_status (
    user_id INT PRIMARY KEY,
    is_active TINYINT(1) NOT NULL DEFAULT 0
);

在這個例子中,is_active欄位被定義為TINYINT(1),用於管理使用者是否啟用。0表示「未啟用」,1表示「啟用」。

2. TINYINT的應用場景

TINYINT非常適合管理小整數或布林值,尤其在需要最佳化資料庫效能與節省儲存空間時被廣泛使用。

作為布林值(Boolean)的使用

由於MySQL沒有專門的BOOLEAN型別,因此會以TINYINT(1)代替來管理布林值。通常0代表「假」,1代表「真」。這種方式能讓旗標管理更加簡單。

UPDATE user_status SET is_active = NOT is_active WHERE user_id = 1;

在這個例子中,指定使用者的is_active值會被反轉,實現簡單的布林切換。

小範圍整數管理

例如,商品庫存數量等僅需小範圍整數時,TINYINT也很實用。如果商品數量不超過255,可以使用TINYINT UNSIGNED來在無符號範圍內進行有效管理。

3. TINYINT與其他整數型別的比較

MySQL提供多種整數型別,其中TINYINT是最小的。相比之下,INTBIGINT能處理更大範圍的數值。以下是TINYINT與其他主要整數型別的差異:

與INT的差異

INT佔4位元組,範圍為-21474836482147483647,而TINYINT僅佔1位元組,範圍為-128127(有符號)或0255(無符號)。因此,使用TINYINT能在節省記憶體的同時,有效管理適當範圍的數據。

與其他小型整數型別比較

除了TINYINT,還有SMALLINT(2位元組)、MEDIUMINT(3位元組)等。不同大小的型別可處理的數值範圍不同,選擇正確的型別對資料設計很重要。

4. 有符號與無符號的使用區分

在MySQL中,TINYINT可定義為有符號或無符號。理解其差異並正確使用,能讓資料管理更有效率。

無符號TINYINT的優點

無符號TINYINTTINYINT UNSIGNED)能處理0255的範圍,適用於不需要負數的情況。例如使用者年齡、商品數量等資料,使用UNSIGNED能擴大正數範圍並提升效率。

有符號TINYINT的優點

有符號TINYINT能處理-128127,適用於需要負數的情境。例如溫度、氣溫等可能包含負數的資料就適合使用有符號TINYINT。

5. TINYINT的使用案例

以下展示如何在資料庫中實際使用TINYINT管理資料。例如,用於商品數量的資料表可這樣定義:

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    quantity TINYINT UNSIGNED NOT NULL
);

在這個例子中,商品庫存數quantity以無符號TINYINT管理,最大值為255。透過NOT NULL確保一定會有值。

此外,管理使用者狀態時使用TINYINT也能簡化旗標控制,特別是在資料量龐大時,能提升資料庫整體效能。

6. 總結與最佳實踐

TINYINT是MySQL中最省記憶體的整數型別之一,非常適合用於小整數與旗標管理。無論是布林值還是小範圍整數,使用TINYINT都能在儲存與效能上達到最佳化。