你已经见过用来存数字和文本的数据类型了。现在该聊聊逻辑数据类型——BOOLEAN。这大概是最“实诚”的数据类型了,因为它只回答两个问题:“是”还是“不是”。有时候也会有个“可能吧”(也就是NULL)。
逻辑数据类型BOOLEAN只存这几种值:
TRUE(真);FALSE(假);NULL(没有值)。
想象一下开关:它可以是开着的TRUE,关着的FALSE,或者灯泡突然没了,状态未知NULL。
可以说,逻辑数据类型是SQL里做决策和写条件逻辑的基础。没有它,写查询的时候都没法正常过滤或者标记某个东西的状态。
使用场景举例
逻辑类型在数据库里用得超多。比如下面这些实际用法:
标志和状态。
比如,is_active字段可以表示用户是不是激活的(TRUE)或者没激活(FALSE)。
SELECT username, is_active
FROM users
WHERE is_active = TRUE;
进度控制。
比如,is_complete字段可以存任务是不是完成了。
SELECT task_name
FROM tasks
WHERE is_complete = FALSE;
可用性检查。
is_available字段可以反映商品在仓库里是不是有货。
怎么在PostgreSQL里用BOOLEAN?
PostgreSQL里的逻辑类型就叫BOOLEAN。来,咱们建个表,随便加点字段:
- 任务唯一ID
- 任务名称
- 任务完成的逻辑状态
然后往表里插几条记录:
| task_id | task_name - VARCHAR(255) | is_complete - BOOLEAN |
|---|---|---|
| 1 | 写报告 | false |
| 2 | 去超市 | true |
| 3 | 读书 | null |
数据查询
现在看看怎么根据逻辑值查数据。比如只查没完成的任务,可以这样写:
SELECT task_name
FROM tasks
WHERE is_complete = FALSE;
这个查询只会返回is_complete等于FALSE的任务。
结果:
| task_name |
|---|
| 写报告 |
用BOOLEAN时的注意点
值过滤
用逻辑类型时你可以用下面这些写法:
= TRUE—— 想明确指定值为真的时候用。= FALSE—— 想查假的值时用。IS NULL—— 想查没有值的记录时用。
举个例子:
SELECT task_name
FROM tasks
WHERE is_complete IS NULL;
条件简写
PostgreSQL挺“聪明”的,很多时候你都不用写= TRUE。比如:
SELECT task_name
FROM tasks
WHERE is_complete;
这个查询和WHERE is_complete = TRUE是一样的。
用BOOLEAN常见的坑
刚开始用新数据类型,踩坑很正常。下面这些是常见问题:
和NULL比较。 新手经常写is_active = NULL。但NULL不能用=比较。要判断是不是NULL,得用IS NULL或者IS NOT NULL。
写多余的= TRUE。 有时候程序员会写多余的东西,比如WHERE is_active = TRUE。这不是错,但其实可以直接写WHERE is_active,更简洁。
字符串用错。 逻辑类型是强类型的。你不能写is_active = 'TRUE'或者is_active = 'FALSE'。要直接用TRUE、FALSE或者NULL。
为啥要这样?
你可能会想:为啥要搞这么复杂,还要加个BOOLEAN?直接用数字不行吗,比如1代表真,0代表假?
答案很简单:BOOLEAN让你的代码和数据更直观。别人一看有个is_active字段,就知道这是个逻辑(是/否)属性。这让数据库结构更好懂,也让你的数据模型对其他开发者来说更清晰。
GO TO FULL VERSION