PostgreSQL AUTO INCREMENT 学习笔记

在 PostgreSQL 中,通过使用序列(sequence)和自增字段(identity)来实现自增。其中,序列是生成自增数字的一种特殊对象。

序列(sequence)

创建序列

创建序列可以使用如下的 SQL 语句:

sqlCopy Code
CREATE SEQUENCE sequence_name START WITH start_value INCREMENT BY increment_value MAXVALUE max_value MINVALUE min_value CACHE cache_value;

其中,

  • sequence_name 是序列的名字;
  • start_value 是序列的起始值,默认为 1;
  • increment_value 是序列的增量,默认为 1;
  • max_value 是序列的最大值,默认为 9223372036854775807;
  • min_value 是序列的最小值,默认为 1;
  • cache_value 是序列每次缓存的数目,可以提高性能,默认为 1。

使用序列

使用序列可以通过如下方式获取自增数字:

sqlCopy Code
SELECT nextval('sequence_name');

其中,sequence_name 是序列的名字。

删除序列

删除序列可以使用如下的 SQL 语句:

sqlCopy Code
DROP SEQUENCE sequence_name;

其中,sequence_name 是要删除的序列的名字。

自增字段(identity)

自增字段(identity)是一种特殊的列类型,它可以自动生成唯一的自增数字。

创建自增字段

创建自增字段可以使用如下的 SQL 语句:

sqlCopy Code
CREATE TABLE table_name ( column_name SERIAL PRIMARY KEY, other_columns other_column_types );

其中,column_name 是自增字段的名字,SERIAL 类型会自动生成序列并关联到该列。PRIMARY KEY 关键字表示该列是主键。

插入数据

插入数据时,自增字段的值会自动递增,无需手动指定。例如:

sqlCopy Code
INSERT INTO table_name (other_columns) VALUES (values);

删除自增字段

删除自增字段可以使用如下的 SQL 语句:

sqlCopy Code
ALTER TABLE table_name DROP COLUMN column_name;

其中,table_name 是要删除自增字段的表的名字,column_name 是要删除的自增字段的名字。

实例

下面是一个使用序列和自增字段的实例:

创建序列

sqlCopy Code
CREATE SEQUENCE my_sequence START WITH 1 INCREMENT BY 1 MAXVALUE 1000 CACHE 10;

创建表

sqlCopy Code
CREATE TABLE my_table ( id SERIAL PRIMARY KEY, name VARCHAR(50) );

插入数据

sqlCopy Code
INSERT INTO my_table (name) VALUES ('Alice'); INSERT INTO my_table (name) VALUES ('Bob'); INSERT INTO my_table (name) VALUES ('Charlie');

查询数据

sqlCopy Code
SELECT * FROM my_table;

输出结果为:

Copy Code
id | name ----+--------- 1 | Alice 2 | Bob 3 | Charlie (3 rows)

删除自增字段

sqlCopy Code
ALTER TABLE my_table DROP COLUMN id;

删除序列

sqlCopy Code
DROP SEQUENCE my_sequence;