MySQL - 布尔数据类型:初学者指南

你好,未来的数据库大师们!今天,我们将深入MySQL布尔数据类型的迷人世界。如果你之前从未编写过一行代码,也不用担心——我将作为你在这个旅程中的友好向导,就像我过去几年中为无数学生所做的那样。那么,拿起你最喜欢的饮料,让我们开始吧!

MySQL - BOOLEAN

布尔数据类型是什么?

在我们深入了解MySQL的细节之前,让我们先了解一下布尔类型是什么。想象你正在和一个朋友玩一个简单的“是”或“否”游戏。这在编程中基本上就是布尔类型——它只能有两个可能的值:真或假。

在实际应用中,布尔类型非常实用。它们可以表示:

  • 用户是否登录
  • 产品是否有库存
  • 学生是否通过了考试

现在,让我们看看MySQL是如何处理这个概念的。

MySQL中的布尔类型

这里有点奇怪——MySQL没有原生的BOOLEAN数据类型!我知道,我知道,听起来很令人困惑。但别担心,MySQL有一个聪明的替代方法。

在MySQL中,BOOLEAN实际上是TINYINT(1)的同义词。这意味着当你创建一个BOOLEAN列时,MySQL实际上秘密地创建了一个TINYINT(1)列。

让我们看看这个实际操作:

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 如果两个都为真则为真
OR 如果任何一个为真则为真
NOT 反转布尔值
XOR 如果恰好有一个为真则为真

让我们用我们的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