📄 一句话概括
BOOLEAN 只有两个值:TRUE 和 FALSE——真/假、是/否、开/关。它是最简单的类型,却也是最容易被忘记「其实底层是数字」的类型:TRUE 就是 1,FALSE 就是 0。
📝 本节和前面几节的关系
类型家族的最后一族:前四节管了数字、文字、日期,本节管「只有两种状态」的量。会员是否有效、订单是否已付、任务是否完成——世界上一大半属性其实只有两种答案,BOOLEAN 就是为它们准备的。
一、定义与用法
CREATE TABLE members (
id INT,
name VARCHAR(20),
active BOOLEAN -- 会员是否有效
);
INSERT INTO members VALUES (1, '张三', TRUE);
INSERT INTO members VALUES (2, '李四', FALSE);
二、真相:底层是数字
在 MySQL 里 BOOLEAN 就是 TINYINT(1) 的别名:
TRUE= 1,FALSE= 0- 查询
WHERE active = TRUE和WHERE active = 1完全等价
SQLite 里更直接:建表写 BOOLEAN,存进去的就是整数 1/0。所以别被名字骗了——它是个「只有两个合法值」的整数。
三、什么时候用 BOOLEAN
| 场景 | 列名习惯 |
|---|---|
| 会员是否启用 | is_active |
| 订单是否已支付 | is_paid |
| 文章是否删除(软删除标记) | is_deleted |
列名带 is_ 前缀是通行习惯,一眼就知道这列只有真/假。
四、动手 Demo:真假当数字用
CREATE TABLE t (
name VARCHAR(20),
ok BOOLEAN
);
INSERT INTO t VALUES ('甲', TRUE), ('乙', FALSE), ('丙', TRUE);
-- 1. 直接查询
SELECT * FROM t WHERE ok = TRUE;
-- 2. 等价的数字写法
SELECT * FROM t WHERE ok = 1;
-- 3. 统计有多少人 TRUE
SELECT COUNT(*) FROM t WHERE ok = TRUE;
三种写法结果一致(第 1、3 条都命中甲和丙,计数 2)。
五、30 秒实验
把 TRUE 换成 2 塞进 BOOLEAN 列再查——多数数据库照样收(它本质是 TINYINT)。这提醒我们:BOOLEAN 的「只有两值」要靠约束保证,光靠类型拦不住 2、3、4(严格说这是 BOOLEAN 的软肋,引出下一节起约束的必要性)。
六、常见误区
- 「BOOLEAN 是独立的高级类型」:底层就是 1 字节小整数;
TRUE/FALSE只是 1/0 的好听名字 - 「塞了 BOOLEAN 就一定只有真假」:类型拦不住 2——真要锁死两值得靠约束(CHECK/枚举,4-6 展开)
自测三问
1. TRUE 和 FALSE 底层是什么?(1 和 0) 2. 列名为什么要带 is_ 前缀?(一眼看出只有真/假两种状态) 3. 只靠 BOOLEAN 类型能保证列里只有 0/1 吗?(不能,塞 2 也收——要靠约束)- ☐ 下一节(4-6 约束、属性-限制允许保存的数据)
相关笔记
- DATE、DATETIME-处理日期和时间的数据类型 —— 上一节:日期家族
- 约束、属性-限制允许保存的数据 —— 下一节:类型拦不住的,交给约束
- 🗄️ 数据库基础 · 索引 —— 全课路线图