1. MySQL的TINYINT是什麼?
在MySQL中,TINYINT是一種用來儲存非常小的整數的資料型別。TINYINT佔用1位元組(8位元)的記憶體,有符號時範圍是-128到127,無符號時則是0到255。TINYINT主要用於高效管理小數值或布林值。
TINYINT的特點
- 記憶體效率:由於
TINYINT僅佔1位元組,相較於其他整數型別(例如:INT或BIGINT),可以節省更多記憶體。 - 有符號與無符號:有符號情況下可處理負數,而使用無符號則能擴大正數的範圍。
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是最小的。相比之下,INT與BIGINT能處理更大範圍的數值。以下是TINYINT與其他主要整數型別的差異:
與INT的差異
INT佔4位元組,範圍為-2147483648到2147483647,而TINYINT僅佔1位元組,範圍為-128到127(有符號)或0到255(無符號)。因此,使用TINYINT能在節省記憶體的同時,有效管理適當範圍的數據。
與其他小型整數型別比較
除了TINYINT,還有SMALLINT(2位元組)、MEDIUMINT(3位元組)等。不同大小的型別可處理的數值範圍不同,選擇正確的型別對資料設計很重要。
4. 有符號與無符號的使用區分
在MySQL中,TINYINT可定義為有符號或無符號。理解其差異並正確使用,能讓資料管理更有效率。
無符號TINYINT的優點
無符號TINYINT(TINYINT UNSIGNED)能處理0到255的範圍,適用於不需要負數的情況。例如使用者年齡、商品數量等資料,使用UNSIGNED能擴大正數範圍並提升效率。
有符號TINYINT的優點
有符號TINYINT能處理-128到127,適用於需要負數的情境。例如溫度、氣溫等可能包含負數的資料就適合使用有符號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都能在儲存與效能上達到最佳化。


