PostgreSQL - Serial类型

PostgreSQL - Serial类型 首页 / PostgreSQL入门教程 / PostgreSQL - Serial类型

在本节中,无涯教程将了解 PostgreSQL Serial类型的工作方式,该类型可让无涯教程在表中定义自动增量列

Serial类型

在PostgreSQL 中,无涯教程有一种称为 Serial 的特殊类型的数据库对象生成器,用于创建序列的整数(通常在表中用作主键)。

在创建新表时,可以在 SERIAL 类型的帮助下生成序列,如以下命令所示:

CREATE TABLE table_name(
    ID SERIAL
);

如果无涯教程在 ID 列中提供 SERIAL类型,则PostgreSQL将执行以下操作:

  • 首先,PostgreSQL将创建一个序列对象,然后将由序列创建的下一个值建立为特定列的预定义值。
  • 在那之后,PostgreSQL将对 ID列增强 NOT NULL约束,因为一个序列始终会产生一个非空值的整数。
  • 最后,PostgreSQL将序列的所有者提供给 ID列;作为输出,当删除表或 ID列时,序列对象将被删除。
CREATE TABLE table_name(
    ID SERIAL
);
CREATE SEQUENCE table_name_ID_seq;
CREATE TABLE table_name (
   ID integer NOT NULL DEFAULT nextval('table_name_ID_seq')
);

ALTER SEQUENCE table_name_ID_seq
OWNED BY table_name.ID;

PostgreSQL Serial类型已分为以下三种类型:

  • SMALLSERIAL
  • SERIAL
  • BIGSERIAL

无涯教程有下表,其中包含PostgreSQL支持的所有 Serial类型规范:

名称存储空间范围
SMALLSERIAL 2个字节 1至32767
SERIAL 4个字节 1至2147483647
BIGSERIAL 8个字节 1至9223372036854775807

Serial类型语法

PostgreSQL Serial类型的语法如下:

variable_name SERIAL

Serial类型示例

无涯教程将在CREATE命令的帮助下创建一个新表,并使用 INSERT 命令插入一些值。

链接:https://www.learnfk.comhttps://www.learnfk.com/postgresql/postgresql-serial.html

来源:LearnFk无涯教程网

在下面的示例中,无涯教程使用 create 命令生成 cars 表。

CREATE TABLE Cars(
   Car_id SERIAL PRIMARY KEY,
   Car_name VARCHAR NOT NULL,
   Car_model VARCHAR NOT NULL 
);

执行上述命令后,已成功创建 Cars 表,如以下屏幕截图所示:

PostgreSQL Serial

生成 Cars 表后,无涯教程可以使用INSERT命令在其中插入一些值。并且无涯教程可以在INSERT命令中使用 DEFAULT 关键字,或省略列名(Car_id)

INSERT INTO Cars(Car_name, Car_model) 
VALUES('Porche','911 Carrera');

实施上述命令后,无涯教程将获得以下消息,并且该值已成功插入到 Cars 表中:

PostgreSQL Serial

使用具有列名(Car_id) DEFAULT关键字:

INSERT INTO Cars(Car_id, Car_name, Car_model) 
VALUES(DEFAULT,'Audi','A8');

在执行上述命令后,无涯教程将获得以下消息;该值已成功插入 Cars 表中:

PostgreSQL Serial

正如无涯教程在上面的屏幕截图中看到的那样,PostgreSQL将两行插入 表中,其中 car_id 列值 1和1 2

创建和插入 cars 表的值后,无涯教程将使用 select 命令 cars 表:

SELECT * FROM Cars;

成功实现上述命令后,无涯教程将获得以下结果:

PostgreSQL Serial

无涯教程可以使用 pg_get_serial_sequence()函数来获取指定表中 SERIAL 列的序列名称,如以下语法所示:

pg_get_serial_sequence('table_name','column_name')

要获取序列创建的当前值,无涯教程可以将序列名称传递给currval()函数。

在以下示例中,无涯教程使用 currval()函数返回由 Cars Car_id_seq 产生的当前值>对象:

SELECT currval(pg_get_serial_sequence('Cars', 'car_id'));

执行上述命令后,无涯教程将获得以下输出:

PostgreSQL Serial

如果要在表中插入新行时获取序列创建的值,可以在INSERT命令中使用 RETURNING Car_id 子句。

以下命令用于在 Cars 表中插入新行,并返回为 Car_id 列生成的记录。

INSERT INTO Cars(Car_name,Car_model) 
VALUES('Jaguar', 'XK')
RETURNING Car_id;

执行上述命令后,无涯教程将获得以下输出,该输出将 Car_id 返回为 3 :

PostgreSQL Serial

让无涯教程再看一个示例,以详细了解 Serial类型

因此,无涯教程将在CREATE命令的帮助下,将另一个新表创建为 Vegetables ,其中 Veg_id 列为 SERIAL 类型。

CREATE TABLE Vegetables(
  	 Veggie_id SERIAL PRIMARY KEY,
   	Veggie_name VARCHAR NOT NULL,
Veggie_seasons VARCHAR NOT NULL
);

执行上述命令后,已成功创建 Vegetables 表,如以下屏幕截图所示:

PostgreSQL Serial

生成 Vegetables 表后,无涯教程将使用INSERT命令在其中插入一些值,并省略 Veggies_id 列,如下面的命令:

INSERT INTO Vegetables(Veggie_name,Veggie_seasons) 
VALUES('Broccoli','Spring');

无涯教程将在执行上述命令时收到以下消息:该值已成功插入 Vegetables 表中。

PostgreSQL Serial

或者,无涯教程也可以使用 Default 关键字并使用 Veggie_id 列,如以下命令所示:

INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) 
VALUES(DEFAULT, 'Sweet Potatoes','Winter');

执行上述命令后,无涯教程将获得以下消息,该消息表明无涯教程可以使用 Default关键字忽略列名,无涯教程将获得类似的输出:

PostgreSQL Serial

因此,在以下命令的帮助下,无涯教程将为 cars 表添加更多值:

INSERT INTO Vegetables(Veggie_name,Veggie_seasons) 
VALUES('Jalapeno Peppers','Fall'),
('Cucumbers','Summer'),
('Winter Squash','Winter'),
('Snow Peas','Spring'),
('Black Radish','All seasons'),
('Pumpkin','Fall');

执行完上述命令后,无涯教程将获得以下消息,该消息显示该值已成功插入 Vegetables 表中。

PostgreSQL Serial

创建并插入 Vegetables 表的值后,无涯教程将使用 SELECT 命令来返回 Vegetables 表的所有行:

SELECT * 
FROM Vegetables;

在成功实现上面的命令后,无涯教程将获得以下输出:

PostgreSQL Serial

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Android开发高手课 -〔张绍文〕

Kafka核心技术与实战 -〔胡夕〕

黄勇的OKR实战笔记 -〔黄勇〕

Service Mesh实战 -〔马若飞〕

动态规划面试宝典 -〔卢誉声〕

手把手带你搭建秒杀系统 -〔佘志东〕

深入浅出分布式技术原理 -〔陈现麟〕

计算机基础实战课 -〔彭东〕

云原生架构与GitOps实战 -〔王炜〕

好记忆不如烂笔头。留下您的足迹吧 :)