PostgreSQL教程

PostgreSQL 串行

在本节中,我们将了解 PostgreSQL串行伪类型的工作,该伪类型允许我们定义 表格中的自动增加列。而且,我们还会看到 PostgreSQL串行伪类型示例

什么是PostgreSQL串行伪类型?

在 PostgreSQL 中,我们有一种特殊的数据库对象生成器,称为 Serial ,它用于 创建整数序列,这些序列经常用作表中的 主键
可以使用在创建新表时, SERIAL伪类型的帮助,如以下命令所示:
CREATE TABLE table_name(
    ID SERIAL
);
如果我们在 ID 列中提供 SERIAL伪类型,则PostgreSQL将执行以下操作:
首先,PostgreSQL将创建一个序列对象,然后将由序列创建的下一个值建立为特定列的预定义值。 在那之后,PostgreSQL将对 ID列增强 NOT NULL约束,因为序列始终会产生一个非空值的整数。 strong>。 最后,PostgreSQL将序列的所有者提供给 ID列;作为输出,当删除表或 ID列时,序列对象将被删除。
注意: 我们可以同时使用这两个命令来指定Serial伪类型,因为下面的命令彼此相似。
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串行伪类型已分为以下三种类型:
SMALLSERIAL 序列 BIGSERIAL
我们有下表,其中包含PostgreSQL支持的所有 Serial伪类型规范:
名称 存储空间 范围
SMALLSERIAL 2个字节 1至32767
SERIAL 4个字节 1至2147483647
BIGSERIAL 8个字节 1至9223372036854775807

PostgreSQL串行伪类型的语法

PostgreSQL 串行伪类型的语法如下:
variable_name SERIAL

PostgreSQL SERIAL类型的示例

让我们看看不同的示例以了解 PostgreSQL串行伪类型如何工作
注意: 我们可以为SERIAL列定义PRIMARY KEY约束,因为SERIAL类型不会间接在列上创建索引或将列设为主键列。
我们将在CREATE命令的帮助下创建一个新表,并使用 INSERT命令插入一些值。
在下面的示例中,我们使用 CREATE 命令将 Cars 表生成到 组织数据库:
CREATE TABLE Cars(
   Car_id SERIAL PRIMARY KEY,
   Car_name VARCHAR NOT null,
   Car_model VARCHAR NOT null 
);
输出
执行上述命令后,已成功创建 Cars 表,如以下屏幕截图所示:
PostgreSQL串行
一旦生成 Cars 表,我们可以使用INSERT命令在其中插入一些值。并且我们可以在INSERT命令中使用 DEFAULT 关键字,或省略列名 (Car_id)
INSERT INTO Cars(Car_name, Car_model) 
VALUES('Porche','911 Carrera');
输出
执行上述命令后,我们将收到以下消息,并且该值已成功插入 Cars 表:
PostgreSQL串行
DEFAULT关键字,其列名称为 (Car_id):
INSERT INTO Cars(Car_id, Car_name, Car_model) 
VALUES(DEFAULT,'Audi','A8');
输出
在执行上述命令时,我们将收到以下消息;值已成功插入到 Cars 表中:
PostgreSQL Serial
如上面的屏幕快照所示,PostgreSQL在 Cars 表中的 Car_id 列中插入了两行值是 1和2
创建并插入 Cars 表的值后,我们将使用 SELECT 命令返回 Cars 表的所有行:
SELECT * FROM Cars;
输出
成功执行上述命令后,我们将得到以下结果:
PostgreSQL串行
我们可以使用 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串行
注意:
如上所述,序列生成器操作不是事务安全的,这意味着如果两个并行数据库尝试获取每个用户,则每个用户将获得不同的值序列中的下一个值。 如果一个用户可以回滚交易,该用户的序列号将处于空闲状态,并在序列中造成缺口。

Example2

让我们再看一个示例,以详细了解 Serial伪类型
因此,我们将在CREATE命令的帮助下,将另一个新表创建为 Vegetables 表,并将其创建为类似的数据库 >组织,其中 Veg_id 列为 SERIAL 伪类型。
CREATE TABLE Vegetables(
     Veggie_id SERIAL PRIMARY KEY,
    Veggie_name VARCHAR NOT null,
Veggie_seasons VARCHAR NOT null
);
输出
执行上述命令后,已成功创建 蔬菜 表,如下面的屏幕截图:
PostgreSQL串行
一旦 蔬菜 表已生成,我们将使用INSERT命令在其中插入一些值,并省略 Veggies_id 列,如以下命令所示:
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) 
VALUES('Broccoli','Spring');
输出
我们将在执行上述命令时收到以下消息: 该值已成功插入 蔬菜 表。
PostgreSQL串行
或者,我们也可以使用 Default 关键字,并使用 Veggie_id 列,如以下命令所示:
INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) 
VALUES(DEFAULT, 'Sweet Potatoes','Winter');
输出
执行上述命令后,我们将得到以下消息,该消息表明我们可以使用 Default关键字忽略列名,我们将得到类似的输出:
PostgreSQL串行 p>因此,我们将通过以下命令在 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');
输出
执行上述命令后,我们将获得以下消息,该消息显示该值已成功插入 蔬菜中 表。
PostgreSQL串行
创建并插入 蔬菜表的值,我们将使用 SELECT 命令返回 蔬菜表的所有行:
SELECT * 
FROM Vegetables;
输出
成功执行上述命令后,我们将获得以下输出:

PostgreSQL串行

在本节中,我们将了解 PostgreSQL串行伪类型的工作,该伪类型允许我们定义 表格中的自动增加列。而且,我们还会看到 PostgreSQL串行伪类型示例

什么是PostgreSQL串行伪类型?

在 PostgreSQL 中,我们有一种特殊的数据库对象生成器,称为 Serial ,它用于 创建整数序列,这些序列经常用作表中的 主键
可以使用在创建新表时, SERIAL伪类型的帮助,如以下命令所示:
CREATE TABLE table_name(
    ID SERIAL
);
如果我们在 ID 列中提供 SERIAL伪类型,则PostgreSQL将执行以下操作:
首先,PostgreSQL将创建一个序列对象,然后将由序列创建的下一个值建立为特定列的预定义值。 在那之后,PostgreSQL将对 ID列增强 NOT NULL约束,因为序列始终会产生一个非空值的整数。 strong>。 最后,PostgreSQL将序列的所有者提供给 ID列;作为输出,当删除表或 ID列时,序列对象将被删除。
注意: 我们可以同时使用这两个命令来指定Serial伪类型,因为下面的命令彼此相似。
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串行伪类型已分为以下三种类型:
SMALLSERIAL 序列 BIGSERIAL
我们有下表,其中包含PostgreSQL支持的所有 Serial伪类型规范:
名称 存储空间 范围
SMALLSERIAL 2个字节 1至32767
SERIAL 4个字节 1至2147483647
BIGSERIAL 8个字节 1至9223372036854775807

PostgreSQL串行伪类型的语法

PostgreSQL 串行伪类型的语法如下:
variable_name SERIAL

PostgreSQL SERIAL类型的示例

让我们看看不同的示例以了解 PostgreSQL串行伪类型如何工作
注意: 我们可以为SERIAL列定义PRIMARY KEY约束,因为SERIAL类型不会间接在列上创建索引或将列设为主键列。
我们将在CREATE命令的帮助下创建一个新表,并使用 INSERT命令插入一些值。
在下面的示例中,我们使用 CREATE 命令将 Cars 表生成到 组织数据库:
CREATE TABLE Cars(
   Car_id SERIAL PRIMARY KEY,
   Car_name VARCHAR NOT null,
   Car_model VARCHAR NOT null 
);
输出
执行上述命令后,已成功创建 Cars 表,如以下屏幕截图所示:
PostgreSQL串行
一旦生成 Cars 表,我们可以使用INSERT命令在其中插入一些值。并且我们可以在INSERT命令中使用 DEFAULT 关键字,或省略列名 (Car_id)
INSERT INTO Cars(Car_name, Car_model) 
VALUES('Porche','911 Carrera');
输出
执行上述命令后,我们将收到以下消息,并且该值已成功插入 Cars 表:
PostgreSQL串行
DEFAULT关键字,其列名称为 (Car_id):
INSERT INTO Cars(Car_id, Car_name, Car_model) 
VALUES(DEFAULT,'Audi','A8');
输出
在执行上述命令时,我们将收到以下消息;值已成功插入到 Cars 表中:
PostgreSQL Serial
如上面的屏幕快照所示,PostgreSQL在 Cars 表中的 Car_id 列中插入了两行值是 1和2
创建并插入 Cars 表的值后,我们将使用 SELECT 命令返回 Cars 表的所有行:
SELECT * FROM Cars;
输出
成功执行上述命令后,我们将得到以下结果:
PostgreSQL串行
我们可以使用 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串行
注意:
如上所述,序列生成器操作不是事务安全的,这意味着如果两个并行数据库
尝试获取每个用户,则每个用户将获得不同的值 序列中的下一个值。 如果一个用户可以回滚交易,该用户的序列号将处于空闲状态,并在序列中造成缺口。

Example2

让我们再看一个示例,以详细了解 Serial伪类型
因此,我们将在CREATE命令的帮助下,将另一个新表创建为 Vegetables 表,并将其创建为类似的数据库 >组织,其中 Veg_id 列为 SERIAL 伪类型。
CREATE TABLE Vegetables(
     Veggie_id SERIAL PRIMARY KEY,
    Veggie_name VARCHAR NOT null,
Veggie_seasons VARCHAR NOT null
);
输出
执行上述命令后,已成功创建 蔬菜 表,如下面的屏幕截图:
PostgreSQL串行
一旦 蔬菜 表已生成,我们将使用INSERT命令在其中插入一些值,并省略 Veggies_id 列,如以下命令所示:
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) 
VALUES('Broccoli','Spring');
输出
我们将在执行上述命令时收到以下消息: 该值已成功插入 蔬菜 表。
PostgreSQL串行
或者,我们也可以使用 Default 关键字,并使用 Veggie_id 列,如以下命令所示:
INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) 
VALUES(DEFAULT, 'Sweet Potatoes','Winter');
输出
执行上述命令后,我们将得到以下消息,该消息表明我们可以使用 Default关键字忽略列名,我们将得到类似的输出:
PostgreSQL串行 p>因此,我们将通过以下命令在 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');
输出
执行上述命令后,我们将获得以下消息,该消息显示该值已成功插入 蔬菜中 表。
PostgreSQL串行
创建并插入 蔬菜表的值,我们将使用 SELECT 命令返回 蔬菜表的所有行:
SELECT * 
FROM Vegetables;
输出
成功执行上述命令后,我们将获得以下输出:
PostgreSQL串行

概述

PostgreSQL串行伪指令中,类型部分,我们已经学习了串行伪类型功能,该功能主要用于为特定表创建 自动增加列值。

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4