在本节中,无涯教程将了解 PostgreSQL Serial类型的工作方式,该类型可让无涯教程在表中定义自动增量列。
在PostgreSQL 中,无涯教程有一种称为 Serial 的特殊类型的数据库对象生成器,用于创建序列的整数(通常在表中用作主键)。
在创建新表时,可以在 SERIAL 类型的帮助下生成序列,如以下命令所示:
CREATE TABLE table_name( ID SERIAL );
如果无涯教程在 ID 列中提供 SERIAL类型,则PostgreSQL将执行以下操作:
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类型已分为以下三种类型:
无涯教程有下表,其中包含PostgreSQL支持的所有 Serial类型规范:
名称 | 存储空间 | 范围 |
---|---|---|
SMALLSERIAL | 2个字节 | 1至32767 |
SERIAL | 4个字节 | 1至2147483647 |
BIGSERIAL | 8个字节 | 1至9223372036854775807 |
PostgreSQL Serial类型的语法如下:
variable_name 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 表,如以下屏幕截图所示:
生成 Cars 表后,无涯教程可以使用INSERT命令在其中插入一些值。并且无涯教程可以在INSERT命令中使用 DEFAULT 关键字,或省略列名(Car_id)。
INSERT INTO Cars(Car_name, Car_model) VALUES('Porche','911 Carrera');
实施上述命令后,无涯教程将获得以下消息,并且该值已成功插入到 Cars 表中:
或使用具有列名(Car_id)的 DEFAULT关键字:
INSERT INTO Cars(Car_id, Car_name, Car_model) VALUES(DEFAULT,'Audi','A8');
在执行上述命令后,无涯教程将获得以下消息;该值已成功插入 Cars 表中:
正如无涯教程在上面的屏幕截图中看到的那样,PostgreSQL将两行插入 表中,其中 car_id 列值 1和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 :
让无涯教程再看一个示例,以详细了解 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 表,如以下屏幕截图所示:
生成 Vegetables 表后,无涯教程将使用INSERT命令在其中插入一些值,并省略 Veggies_id 列,如下面的命令:
INSERT INTO Vegetables(Veggie_name,Veggie_seasons) VALUES('Broccoli','Spring');
无涯教程将在执行上述命令时收到以下消息:该值已成功插入 Vegetables 表中。
或者,无涯教程也可以使用 Default 关键字并使用 Veggie_id 列,如以下命令所示:
INSERT INTO Vegetables (Veggie_id,Veggie_seasons, Veggie_seasons) VALUES(DEFAULT, 'Sweet Potatoes','Winter');
执行上述命令后,无涯教程将获得以下消息,该消息表明无涯教程可以使用 Default关键字或忽略列名,无涯教程将获得类似的输出:
因此,在以下命令的帮助下,无涯教程将为 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 表中。
创建并插入 Vegetables 表的值后,无涯教程将使用 SELECT 命令来返回 Vegetables 表的所有行:
SELECT * FROM Vegetables;
在成功实现上面的命令后,无涯教程将获得以下输出:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)