PostgreSQL 教程: boolean 布尔类型

八月 23, 2023

摘要:在本教程中,您将了解 PostgreSQL 布尔数据类型以及如何在设计数据库表时使用它。

PostgreSQL 布尔类型简介

PostgreSQL Boolean

PostgreSQL 支持单一的布尔数据类型BOOLEAN,它可以具有三个值:truefalseNULL

PostgreSQL 使用一个字节在数据库中存储布尔值。BOOLEAN可以简写为BOOL

在标准 SQL 中,布尔值可以是TRUEFALSENULL。然而,PostgreSQL 在处理TRUEFALSE值时相当灵活。

下表显示了 PostgreSQL 中TRUEFALSE的有效文字值。

True False
true false
‘t’ ‘f ‘
‘true’ ‘false’
‘y’ ‘n’
‘yes’ ‘no’
‘1’ ‘0’

请注意,前导或尾随空格并不重要,并且除truefalse之外的所有常量值都必须用单引号引起来。

PostgreSQL 布尔型示例

让我们看一下使用 PostgreSQL 布尔数据类型的一些示例。

首先,创建一个新表stock_availability来记录哪些产品可用。

CREATE TABLE stock_availability (
   product_id INT PRIMARY KEY,
   available BOOLEAN NOT NULL
);

其次,插入一些示例数据stock_availability表中。我们使用各种文字值作为布尔值。

INSERT INTO stock_availability (product_id, available)
VALUES
	(100, TRUE),
	(200, FALSE),
	(300, 't'),
	(400, '1'),
	(500, 'y'),
	(600, 'yes'),
	(700, 'no'),
	(800, '0');

第三步,使用以下语句检查产品的可用性:

SELECT *
FROM stock_availability
WHERE available = 'yes';
 product_id | available
------------+-----------
        100 | t
        300 | t
        400 | t
        500 | t
        600 | t
(5 rows)

您可以使用布尔列而不使用任何运算符来暗示真值。例如,以下查询返回所有可用的产品:

SELECT *
FROM stock_availability
WHERE available;

同样,如果要查找false值,可以将布尔列的值与任何有效的布尔常量进行比较。

以下查询返回不可用的产品。

SELECT *
FROM stock_availability
WHERE available = 'no';
 product_id | available
------------+-----------
        200 | f
        700 | f
        800 | f
(3 rows)

或者您可以使用NOT运算符检查布尔列中的值是否为 false,如下所示:

SELECT *
FROM stock_availability
WHERE NOT available;

设置布尔列的默认值

要为现有的布尔列设置默认值,请使用 ALTER TABLE 语句中的SET DEFAULT子句。

例如,以下ALTER TABLE语句设置stock_availability表中available列的默认值:

ALTER TABLE stock_availability 
ALTER COLUMN available
SET DEFAULT FALSE;

如果插入行而不指定available列的值,PostgreSQL 将使用FALSE

INSERT INTO stock_availability (product_id)
VALUES (900);
SELECT *
FROM stock_availability
WHERE product_id = 900;
 product_id | available
------------+-----------
        900 | f
(1 row)

同样,如果您想在创建表时为布尔列设置默认值,则可以在列定义中使用DEFAULT约束,如下所示:

CREATE TABLE boolean_demo(
   ...
   is_ok BOOL DEFAULT 't'
);

在本教程中,您了解了 PostgreSQL 的BOOLEAN数据类型,以及如何使用它来存储布尔数据。