PostgreSQL enum 数据类型介绍
PostgreSQL enum
数据类型是一种用于定义枚举类型的数据类型。它允许您将一组可能的值作为一个命名的列表来定义,并将这个列表与列或表单元格关联起来。在 PostgreSQL 中,enum
类型本质上是一个具有标签的整数值集合,这些标签是用户定义的。
语法
创建 enum
类型的语法如下所示:
CREATE TYPE enum_type AS ENUM ('label1', 'label2', ...);
其中 enum_type
是用户定义的类型名称,后面跟着一个由逗号分隔的标签列表。
定义 enum
类型的列的语法如下所示:
column_name enum_type
在表中定义 enum
列的语法如下所示:
CREATE TABLE table_name (
...
column_name enum_type,
...
);
使用场景
enum
数据类型适合用于一组预定义的可能值的情况。例如,如果您的应用程序需要在一个列中存储红、绿、蓝三种颜色的值,那么您可以定义一个 enum
类型来表示这些颜色,并将其应用于这个列。使用 enum
数据类型可以确保只有预定义的值被插入到列中,这可以避免数据的不一致性。
另一个适合使用 enum
类型的场景是在应用程序中需要使用状态的情况。例如,如果您的应用程序需要维护订单状态,那么您可以定义一个 enum
类型,其中包含订单可能的状态(如“已接受”、“已发货”、“已付款”等),并将其应用于订单表中的状态列。
示例
示例 1
以下是一个 enum
类型的示例:
CREATE TYPE color AS ENUM ('red', 'green', 'blue');
在上面的示例中,我们创建了一个名为 color
的 enum
类型,其中包含三种颜色。
我们可以在表中使用该类型来定义列,例如:
CREATE TABLE products (
...
color color,
...
);
接下来,我们可以插入具有预定义颜色值的记录,例如:
INSERT INTO products (name, price, color)
VALUES ('Product 1', 10.99, 'red'),
('Product 2', 15.99, 'green'),
('Product 3', 20.99, 'blue');
示例 2
以下是一个 enum
类型在订单状态中的示例:
CREATE TYPE order_status AS ENUM ('pending', 'paid', 'accepted', 'shipped', 'completed');
在上面的示例中,我们创建了一个名为 order_status
的 enum
类型,其中包含订单可能的状态。
我们可以在订单表中使用该类型来定义状态列,例如:
CREATE TABLE orders (
...
status order_status,
...
);
接下来,我们可以将订单状态转换为paid
或cancelled
,并查看表中的数据。
UPDATE orders SET status = 'paid' WHERE id = 1;
UPDATE orders SET status = 'cancelled' WHERE id = 3;
SELECT * FROM orders;
执行上述 SQL 语句后,我们可以得到如下结果:
id | customer_id | amount | status
----+-------------+-----------+-------------
1 | 1 | 1000.00 | paid
2 | 2 | 2000.00 | pending
3 | 3 | 3000.00 | cancelled
(3 rows)
我们可以看到,status
列中的值已经被更新为paid
或cancelled
。
结论
PostgreSQL 的 enum
数据类型提供了一种方便的方式来表示具有固定值集合的列。它可以在表中定义为列类型,可以包含一个或多个可能的值,并可以在表创建时指定或通过修改表结构添加。 enum
数据类型可用于多种场景,如状态列、类别列等。在查询中,可以使用 =
、<>
等运算符来比较 enum
值。同时,也可以通过修改枚举类型来添加、删除或重新命名枚举值。