Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách thêm trường Boolean vào MySQL


Kiểu dữ liệu Boolean trong MySQL

MySQL không có kiểu BOOLEAN riêng. Các từ khóa sau là đồng nghĩa với TINYINT(1):

  • BOOL
  • BOOLEAN
  • TINYINT(1)

Kiểm tra biểu diễn nội bộ

1. Tạo bảng với BOOL

mysql> CREATE TABLE AddBoolDemo ( 
-> isToggle BOOL 
-> ); 
Query OK, 0 rows affected (1.24 sec)

2. Xem định nghĩa thực tế (DDL)

mysql> SHOW CREATE TABLE AddBoolDemo\G
*************************** 1. row *************************** 
Table: AddBoolDemo 
Create Table: CREATE TABLE `addbooldemo` ( 
  `isToggle` tinyint(1) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 
1 row in set (0.00 sec)

Giá trị True/False

Giá trị nhậpLưu trữÝ nghĩa
TRUE / true1True
FALSE / false0False
11True
00False
Số khác 0 (-1, 5, 100)Giá trị đóTrue (trong điều kiện)
NULLNULLUnknown

Ví dụ chèn và truy vấn

Chèn các giá trị

mysql> INSERT INTO AddBoolDemo VALUES(TRUE); 
Query OK, 1 row affected (0.19 sec) 
mysql> INSERT INTO AddBoolDemo VALUES(FALSE); 
Query OK, 1 row affected (0.19 sec) 
mysql> INSERT INTO AddBoolDemo VALUES(1); 
Query OK, 1 row affected (0.10 sec) 
mysql> INSERT INTO AddBoolDemo VALUES(0); 
Query OK, 1 row affected (0.18 sec)

Kết quả

mysql> SELECT * FROM AddBoolDemo;
+----------+ 
| isToggle | 
+----------+ 
| 1        | 
| 0        | 
| 1        | 
| 0        | 
+----------+ 
4 rows in set (0.00 sec)

Ứng dụng thực tế

Tạo bảng với Boolean mặc định FALSE

CREATE TABLE users ( 
    id INT PRIMARY KEY AUTO_INCREMENT, 
    username VARCHAR(50) NOT NULL, 
    is_active BOOLEAN DEFAULT FALSE, 
    is_verified BOOLEAN DEFAULT FALSE, 
    is_deleted BOOLEAN DEFAULT FALSE 
);

Truy vấn điều kiện Boolean

-- Cách 1: So sánh trực tiếp
SELECT * FROM users WHERE is_active = TRUE;

-- Cách 2: Rút gọn (MySQL cho phép)
SELECT * FROM users WHERE is_active;

-- Cách 3: Chuyển thành text
SELECT 
    username,
    CASE is_active WHEN 1 THEN 'Hoạt động' ELSE 'Khóa' END AS status
FROM users;

Cập nhật Boolean

UPDATE users SET is_verified = TRUE WHERE id = 123;
UPDATE users SET is_deleted = NOT is_deleted WHERE id = 123; -- Toggle

Lưu ý quan trọng

  • MySQL đánh giá bất kỳ số ≠ 0 là TRUE trong điều kiện WHERE
  • Index trên cột BOOLEAN/TINYINT(1) có độ chọn lọc thấp (chỉ 0/1) → ít hiệu quả
  • Kết hợp với cột khác cho composite index: INDEX (is_active, created_at)
  • Ứng dụng (PHP, Java, Python...) thường map 0/1 ↔ false/true tự động