自动递增

PostgreSQL具有数据类型smallserial,serial和bigserial; 这些不是真正的类型,而只是在创建唯一标识符列的标志以方便使用。 我们之前创建省份和学生 是自己填写 ID的

INSERT INTO public.province( 	"ID", "Name") 	VALUES (6, '上海');
Code language: PHP (php)

这些类似于一些其他数据库支持的AUTO_INCREMENT属性。 如果您希望某列具有唯一的约束或是主键,则必须搭配主键约束进行指定。 类型名称serial用于创建整数列。 类型名称bigserial创建一个bigint类型的列。 如果您期望在表的使用期限内使用超过2^31个标识符,则应使用bigserial。 类型名称smallserial创建一个smallint列。

说白了 也就是如果我们希望 某个字段是自增长 则使用这些带serial后缀的类型。这一点和其他的sql关系型数据库不同。

比如我们创建一张公司表 希望它的ID是自增长。

CREATE TABLE COMPANY(
    ID  SERIAL PRIMARY KEY,
    NAME           TEXT      NOT NULL,
    AGE            INT       NOT NULL,
    ADDRESS        CHAR(50),
    SALARY         REAL
);
Code language: PHP (php)

插入的时候,不需要指明ID的值。ID会自动生成。

INSERT INTO public."COMPANY"(
	 "Name")
	VALUES ('百度');
Code language: PHP (php)

接着 我们往这张表 插入多条数据。 注意:我们并没有指明ID的值。它是自动生成的。

INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ('Allen', 25, 'Texas', 15000.00 );
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'Teddy', 23, 'Norway', 20000.00 );
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'Mark', 25, 'Rich-Mond ', 65000.00 );
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'David', 27, 'Texas', 85000.00 );
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'Kim', 22, 'South-Hall', 45000.00 );
INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( 'James', 24, 'Houston', 10000.00 );
Code language: JavaScript (javascript)
  1. serial / bigserial / smallserial 本质只是语法糖,底层会自动创建序列(sequence)。
  2. 插入数据时,不指定自增字段,数据库自动分配ID。
  3. 手动指定ID插入,不会同步更新序列,后续自增可能出现主键冲突。
  4. 新版本PostgreSQL推荐使用 GENERATED AS IDENTITY,相比serial更加规范。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注