以下是原文翻译成繁體中文的內容:
# 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';
讓我們分解這些:
- AND查詢只會返回遊戲完成且遊戲名為'Chess'的行。
- OR查詢會返回遊戲完成或遊戲名為'Monopoly'的行。
- NOT查詢會返回遊戲未完成的行(記住,這意味著is_completed = 0)。
- XOR查詢會返回遊戲完成或遊戲名為'Monopoly'的行,但不是兩者都滿足。
這些運算符就像构建更複雜查詢的積木。它們讓我們能夠對數據提出非常具體的問題,就像偵探一樣將線索拼接起來!
結論
好了,各位!我們已經穿越了MySQL布爾數據的世界,從它作為TINYINT(1)的奇特實現到幫助我們查詢數據的強大運算符。
記住,在數據庫的世界裡,所有事物都是1或0,TRUE或FALSE。就像數據庫不斷地和我们的數據玩著一個巨大的「是/不是」遊戲。現在,你已經有了加入這場遊戲的工具!
在你繼續你的MySQL冒險時,你會發現這些布爾概念到處都是。它們是我們過濾數據、在我們的代碼中做決策,並最終构建強大且動態應用的秘訣。
所以,我的學生們,勇往直前吧,願你的查詢永遠返回TRUE(除非你希望它們返回FALSE,當然)!
Credits: Image by storyset