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:
热门文章
优秀文章