PostgreSQL Serial伪类型

在本节中,我们将了解PostgreSQL Serial伪类型的工作原理,它允许我们在表中定义自动增量列。我们还看到了PostgreSQL Serial 伪类型的示例。

什么是 PostgreSQL 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

PostgreSQL Serial伪类型的语法

PostgreSQL Serial 伪类型的语法如下:

variable_name SERIAL 

PostgreSQL SERIAL 类型的例子

让我们看不同的例子来理解PostgreSQL Serial 伪类型是如何工作的。

我们正在使用 CREATE 命令的帮助创建一个新表,并使用INSERT 命令插入一些值。

在下面的示例中,我们使用CREATE命令将Cars表生成到Organization 数据库中:

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

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

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

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

执行完上面的命令后,我们会得到如下信息,值已经成功插入到Cars表中:

或将DEFAULT 关键字与列名(Car_id) 一起使用:

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

执行上述命令后,我们将收到以下消息;该值已成功插入到Cars表中:

正如我们在上面的屏幕截图中看到的,PostgreSQL 在Cars表中插入了两行,其中Car_id列的值为1 和 2。

创建并插入Cars表的值后,我们将使用SELECT命令返回Cars表的所有行:

SELECT * FROM Cars;  

成功执行上述命令后,我们将得到如下结果:

我们可以使用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'));  

执行上述命令后,我们将得到以下输出:

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

下面的命令用于向Cars表中插入一个新行,并返回为Car_id列生成的那些记录。

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

执行上述命令后,我们将得到以下输出,其中Car_id返回为3:

热门文章

优秀文章