MySQL - Boolean Datatype: A Beginner's Guide

Xin chào các bạn, những pháp sư cơ sở dữ liệu tương lai! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới kỳ diệu của kiểu dữ liệu Boolean trong MySQL. Đừng lo lắng nếu bạn chưa từng viết một dòng mã trước đây - tôi sẽ là người bạn thân thiện dẫn đường cho bạn trong hành trình này, cũng như tôi đã làm cho hàng trăm học sinh trong những năm dạy học của mình. Vậy, hãy lấy một ly đồ uống yêu thích của bạn, và chúng ta cùng bắt đầu nhé!

MySQL - BOOLEAN

What is a Boolean Datatype?

Trước khi chúng ta nhảy vào các chi tiết cụ thể của MySQL, hãy hiểu thế nào là một Boolean. Hãy tưởng tượng bạn đang chơi một trò chơi đơn giản "yes" hoặc "no" với một người bạn. Đó chính là Essense của Boolean trong lập trình - nó chỉ có thể có hai giá trị có thể: true hoặc false.

Trong các ứng dụng thực tế, Boolean vô cùng hữu ích. Chúng có thể đại diện cho:

  • Người dùng có đăng nhập hay không
  • Một sản phẩm có trong kho hay không
  • Một học sinh có đậu exams hay không

Bây giờ, hãy xem MySQL xử lý khái niệm này như thế nào.

Boolean in MySQL

Đây là phần thú vị - MySQL không có kiểu dữ liệu BOOLEAN nguyên thủy! Tôi biết, tôi biết, nó nghe có vẻ rối rắm. Nhưng đừng lo lắng, MySQL có một cách giải quyết thông minh.

Trong MySQL, BOOLEAN thực sự được coi là từ đồng nghĩa với TINYINT(1). Điều này có nghĩa là khi bạn tạo một cột BOOLEAN, MySQL sẽ bí mật tạo một cột TINYINT(1) thay vì.

Hãy cùng xem điều này trong thực hành:

CREATE TABLE game_status (
id INT AUTO_INCREMENT PRIMARY KEY,
game_name VARCHAR(50),
is_completed BOOLEAN
);

INSERT INTO game_status (game_name, is_completed) VALUES
('Chess', TRUE),
('Monopoly', FALSE),
('Scrabble', TRUE);

SELECT * FROM game_status;

Khi bạn chạy lệnh SELECT này, bạn có thể ngạc nhiên khi thấy:

+----+-----------+--------------+
| id | game_name | is_completed |
+----+-----------+--------------+
|  1 | Chess     |            1 |
|  2 | Monopoly  |            0 |
|  3 | Scrabble  |            1 |
+----+-----------+--------------+

Chờ một chút! TRUE và FALSE của chúng ta đâu rồi? Well, hãy nhớ lại những gì tôi đã nói về BOOLEAN là TINYINT(1)? Đây là những gì đang xảy ra:

  • TRUE được lưu trữ là 1
  • FALSE được lưu trữ là 0

Đó là như MySQL đang chơi một trò chơi bí mật "1 có nghĩa là yes, 0 có nghĩa là no" đằng sau hậu trường!

Replacing BOOLEAN 0,1 with TRUE and FALSE

Bây giờ, bạn có thể đang nghĩ, "Nhưng tôi muốn thấy TRUE và FALSE trong kết quả của mình!" Đừng lo lắng, MySQL có thể giúp bạn. Chúng ta có thể sử dụng lệnh CASE để chuyển đổi những con số 0 và 1 này trở lại thành TRUE và FALSE:

SELECT
id,
game_name,
CASE
WHEN is_completed = 1 THEN 'TRUE'
ELSE 'FALSE'
END AS is_completed
FROM game_status;

Điều này sẽ cho bạn một kết quả dễ đọc hơn:

+----+-----------+--------------+
| id | game_name | is_completed |
+----+-----------+--------------+
|  1 | Chess     | TRUE         |
|  2 | Monopoly  | FALSE        |
|  3 | Scrabble  | TRUE         |
+----+-----------+--------------+

Thật tốt phải không? Đó là như chúng ta đã cho MySQL một bộ翻译 để nói tiếng của chúng ta!

Boolean Operators Using a Client Program

Bây giờ chúng ta đã hiểu cách MySQL xử lý Boolean, hãy xem xét một số toán tử Boolean. Những toán tử này giống như các quy tắc của trò chơi "yes/no" của chúng ta, chỉ cho MySQL cách kết hợp hoặc manipulates các giá trị Boolean.

Dưới đây là các toán tử Boolean chính trong MySQL:

Toán tử Mô tả
AND Đúng nếu cả hai đều đúng
OR Đúng nếu ít nhất một trong hai đúng
NOT Đảo ngược giá trị Boolean
XOR Đúng nếu chính xác một trong hai đúng

Hãy cùng xem chúng trong hành động với bảng game_status của chúng ta:

-- Toán tử AND
SELECT * FROM game_status WHERE is_completed = TRUE AND game_name = 'Chess';

-- Toán tử OR
SELECT * FROM game_status WHERE is_completed = TRUE OR game_name = 'Monopoly';

-- Toán tử NOT
SELECT * FROM game_status WHERE NOT is_completed;

-- Toán tử XOR
SELECT * FROM game_status WHERE is_completed XOR game_name = 'Monopoly';

Hãy phân tích chúng:

  1. Truy vấn AND sẽ chỉ trả về các hàng nơi trò chơi đã hoàn thành và tên trò chơi là 'Chess'.
  2. Truy vấn OR sẽ trả về các hàng nơi trò chơi đã hoàn thành hoặc tên trò chơi là 'Monopoly'.
  3. Truy vấn NOT sẽ trả về các hàng nơi trò chơi không hoàn thành (nhớ, điều này có nghĩa là is_completed = 0).
  4. Truy vấn XOR sẽ trả về các hàng nơi hoặc trò chơi đã hoàn thành hoặc tên trò chơi là 'Monopoly', nhưng không phải cả hai.

Những toán tử này giống như các khối xây dựng của các truy vấn phức tạp hơn. Chúng cho phép bạn hỏi các câu hỏi cụ thể về dữ liệu của mình, giống như một thám tử gỡ rối các manh mối!

Conclusion

Và thế là bạn đã có nó, các bạn! Chúng ta đã cùng nhau hành trình qua vùng đất của Boolean trong MySQL, từ việc thực hiện kỳ lạ của chúng như TINYINT(1) đến các toán tử mạnh mẽ giúp chúng ta truy vấn dữ liệu.

Nhớ rằng, trong thế giới cơ sở dữ liệu, mọi thứ đều là 1 hoặc 0, TRUE hoặc FALSE. Nó giống như cơ sở dữ liệu liên tục chơi một trò chơi lớn "yes/no" với dữ liệu của chúng ta. Và bây giờ, bạn đã có công cụ để tham gia vào trò chơi đó!

Khi bạn tiếp tục hành trình MySQL của mình, bạn sẽ thấy rằng các khái niệm Boolean xuất hiện ở mọi nơi. Chúng là bí quyết giúp chúng ta lọc dữ liệu, ra quyết định trong mã của mình, và cuối cùng là xây dựng các ứng dụng mạnh mẽ và động.

Vậy, hãy tiến lên, các học sinh của tôi, và chúc may mắn cho các truy vấn của bạn luôn trả về TRUE (trừ khi bạn muốn chúng trả về FALSE, tất nhiên)!

Credits: Image by storyset