1. MySQLのTINYINTとは?
Trong MySQL, TINYINT
là một kiểu dữ liệu được dùng để lưu trữ các số nguyên rất nhỏ. TINYINT
chỉ tiêu tốn 1 byte (8 bit) bộ nhớ, có thể lưu các giá trị từ -128
đến 127
với dạng có dấu (SIGNED), hoặc từ 0
đến 255
với dạng không dấu (UNSIGNED). TINYINT thường được sử dụng để quản lý các số nhỏ hoặc giá trị boolean một cách hiệu quả.
Đặc điểm của TINYINT
- Tiết kiệm bộ nhớ:
TINYINT
chỉ dùng 1 byte, giúp tiết kiệm bộ nhớ hơn so với các kiểu số nguyên khác nhưINT
hayBIGINT
. - Có dấu và không dấu: Với dạng có dấu, có thể lưu cả số âm; còn với dạng không dấu, phạm vi số dương sẽ được mở rộng.
Ví dụ sử dụng TINYINT
Ví dụ sau minh họa cách dùng kiểu TINYINT
để quản lý các số nhỏ hoặc cờ trạng thái trong một bảng:
CREATE TABLE user_status (
user_id INT PRIMARY KEY,
is_active TINYINT(1) NOT NULL DEFAULT 0
);
Trong ví dụ này, cột is_active
được định nghĩa là TINYINT(1)
để quản lý trạng thái hoạt động của người dùng. Giá trị 0
nghĩa là “không hoạt động”, còn 1
nghĩa là “đang hoạt động”.
2. Trường hợp sử dụng TINYINT
TINYINT
là kiểu dữ liệu tối ưu để quản lý số nguyên nhỏ và giá trị boolean. Nó thường được dùng để tăng hiệu suất cơ sở dữ liệu và tiết kiệm dung lượng lưu trữ.
Dùng làm giá trị Boolean
Vì MySQL không có kiểu dữ liệu BOOLEAN
riêng, nên TINYINT(1)
được dùng thay thế để quản lý giá trị boolean. Thông thường, 0
được coi là “FALSE” và 1
là “TRUE”.
UPDATE user_status SET is_active = NOT is_active WHERE user_id = 1;
Trong ví dụ này, giá trị is_active
của người dùng được chỉ định sẽ đảo ngược, cho phép chuyển đổi trạng thái boolean một cách đơn giản.
Quản lý số nhỏ
Ví dụ, để quản lý số lượng hàng tồn kho với phạm vi nhỏ, TINYINT
cũng rất hữu ích. Nếu số lượng sản phẩm không vượt quá 255, thì dùng TINYINT UNSIGNED
là lựa chọn phù hợp.

3. So sánh TINYINT với các kiểu số nguyên khác
MySQL cung cấp nhiều kiểu số nguyên, trong đó TINYINT
là kiểu nhỏ nhất. Trong khi đó, INT
hay BIGINT
có khả năng lưu trữ phạm vi số lớn hơn. Sau đây là sự khác biệt:
Khác biệt với INT
INT
chiếm 4 byte và lưu giá trị từ -2147483648
đến 2147483647
, trong khi TINYINT
chỉ chiếm 1 byte và quản lý phạm vi từ -128
đến 127
(SIGNED) hoặc từ 0
đến 255
(UNSIGNED). Vì vậy, TINYINT
giúp tiết kiệm bộ nhớ khi chỉ cần lưu các giá trị nhỏ.
So sánh với các kiểu số nguyên nhỏ khác
Ngoài TINYINT
, còn có SMALLINT
(2 byte), MEDIUMINT
(3 byte). Tùy theo phạm vi giá trị cần quản lý, bạn nên chọn kiểu dữ liệu phù hợp.
4. Khi nào dùng có dấu và không dấu
Trong MySQL, TINYINT
có thể định nghĩa ở dạng có dấu (SIGNED) hoặc không dấu (UNSIGNED). Việc chọn đúng loại sẽ giúp quản lý dữ liệu hiệu quả hơn.
Ưu điểm của TINYINT UNSIGNED
Dạng không dấu (TINYINT UNSIGNED
) có thể lưu giá trị từ 0
đến 255
. Điều này phù hợp với dữ liệu không bao giờ âm, chẳng hạn như tuổi của người dùng hoặc số lượng sản phẩm.
Ưu điểm của TINYINT SIGNED
Dạng có dấu (TINYINT SIGNED
) có thể lưu giá trị từ -128
đến 127
, phù hợp khi dữ liệu có thể mang giá trị âm, ví dụ như nhiệt độ.

5. Ví dụ sử dụng TINYINT trong thực tế
Dưới đây là ví dụ sử dụng TINYINT
để quản lý số lượng sản phẩm trong bảng:
CREATE TABLE products (
product_id INT PRIMARY KEY,
quantity TINYINT UNSIGNED NOT NULL
);
Trong ví dụ này, cột quantity
được định nghĩa là TINYINT UNSIGNED
để quản lý tồn kho tối đa 255 sản phẩm. Đồng thời, NOT NULL
đảm bảo giá trị luôn được nhập.
Ngoài ra, TINYINT
cũng được dùng để quản lý trạng thái người dùng (các cờ trạng thái), giúp cơ sở dữ liệu đơn giản và hiệu quả hơn. Với dữ liệu lớn, TINYINT
giúp cải thiện hiệu suất tổng thể.
6. Tổng kết và cách sử dụng tối ưu
TINYINT
là kiểu dữ liệu tiết kiệm bộ nhớ, phù hợp để quản lý số nguyên nhỏ hoặc giá trị boolean trong MySQL. Khi dùng TINYINT
để quản lý cờ trạng thái hoặc số lượng nhỏ, bạn có thể tối ưu cả hiệu suất lẫn dung lượng lưu trữ.