以下是原文翻译成繁體中文的內容:

MySQL - BOOLEAN

# MySQL - 布爾數據類型:初學者指南

你好啊,未來的數據庫大師們!今天,我們將要進入MySQL的布爾數據類型的迷人世界。別擔心如果你之前從未寫過一行代碼——我將成為你這次旅行的友好指導者,正如我過去幾年來為無數學生所做的那樣。所以,拿起你喜歡的飲料,我們開始吧!

## 什麼是布爾數據類型?

在我們深入MySQL的具體內容之前,讓我們先了解一下什麼是布爾數據類型。想像你正在和朋友玩一個簡單的「是」或「不是」遊戲。這基本上就是編程中的布爾數據類型——它只能有兩個可能的值:true 或 false。

在現實世界的應用中,布爾數據類型非常有用。它們可以表示:
- 用戶是否登錄
- 產品是否有庫存
- 學生是否通過了考試

現在,讓我們看看MySQL是如何處理這個概念的。

## MySQL中的布爾數據類型

這裡有點奇怪——MySQL沒有原生的BOOLEAN數據類型!我知道,我知道,這聽起來很混亂。但別擔心,MySQL有一個巧妙的方法來解決這個問題。

在MySQL中,BOOLEAN其實被當作TINYINT(1)的別名。這意味著當你創建一個BOOLEAN列時,MySQL會偷偷地創建一個TINYINT(1)列。

讓我們看看這是如何實現的:

```sql
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;

當你運行這個SELECT語句時,你可能會感到驚訝:

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

等一下!我們的TRUE和FALSE值在哪裡?記得我剛才說過BOOLEAN等於TINYINT(1)嗎?這就是發生的事情:

  • TRUE被存儲為1
  • FALSE被存儲為0

這就像MySQL在背後玩著一個「1代表是,0代表不是」的秘密遊戲!

將BOOLEAN的0,1替換為TRUE和FALSE

現在,你可能會想,「但我想在我的結果中看到TRUE和FALSE!」別擔心,MySQL有辦法做到這點。我們可以使用CASE語句將那些狡猾的0和1轉換回TRUE和FALSE:

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

這會給你一個更易於閱讀的結果:

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

好多了吧?這就像我們給MySQL一個小翻譯器,讓它能夠說我們的語言!

使用客戶端程序使用布爾運算符

現在,我們了解了MySQL如何處理布爾數據,讓我們來看看一些布爾運算符。這些就像我們「是/不是」遊戲的規則,告訴MySQL如何組合或操縱布爾值。

以下是在MySQL中的主要布爾運算符:

運算符 描述
AND 兩者都為true時為true
OR 任一為true時為true
NOT 反轉布爾值
XOR 正好有一個為true時為true

讓我們在game_status表中看看這些運算符的使用:

-- AND運算符
SELECT * FROM game_status WHERE is_completed = TRUE AND game_name = 'Chess';

-- OR運算符
SELECT * FROM game_status WHERE is_completed = TRUE OR game_name = 'Monopoly';

-- NOT運算符
SELECT * FROM game_status WHERE NOT is_completed;

-- XOR運算符
SELECT * FROM game_status WHERE is_completed XOR game_name = 'Monopoly';

讓我們分解這些:

  1. AND查詢只會返回遊戲完成且遊戲名為'Chess'的行。
  2. OR查詢會返回遊戲完成或遊戲名為'Monopoly'的行。
  3. NOT查詢會返回遊戲未完成的行(記住,這意味著is_completed = 0)。
  4. XOR查詢會返回遊戲完成或遊戲名為'Monopoly'的行,但不是兩者都滿足。

這些運算符就像构建更複雜查詢的積木。它們讓我們能夠對數據提出非常具體的問題,就像偵探一樣將線索拼接起來!

結論

好了,各位!我們已經穿越了MySQL布爾數據的世界,從它作為TINYINT(1)的奇特實現到幫助我們查詢數據的強大運算符。

記住,在數據庫的世界裡,所有事物都是1或0,TRUE或FALSE。就像數據庫不斷地和我们的數據玩著一個巨大的「是/不是」遊戲。現在,你已經有了加入這場遊戲的工具!

在你繼續你的MySQL冒險時,你會發現這些布爾概念到處都是。它們是我們過濾數據、在我們的代碼中做決策,並最終构建強大且動態應用的秘訣。

所以,我的學生們,勇往直前吧,願你的查詢永遠返回TRUE(除非你希望它們返回FALSE,當然)!

Credits: Image by storyset