PostgreSql主键自动生成的方法

前言

postgresql不同于mysql数据库,mysql建表时通过auto_increment关键字就可以实现主键自增, 但postgresql是通过序列和函数实现主键自动生成。

创建方法

1、主键自增长
方法一:定义序列,再定义主键调用增长函数实现
定义序列

CREATE SEQUENCE "public"."t_student_id_seq" 
 INCREMENT 1  
 MINVALUE 1  
 MAXVALUE 9999999999  
 START 1  
 CACHE 1;

创建表,主键添加增长函数

CREATE TABLE "public"."t_student" (
  "id" int4 NOT NULL DEFAULT nextval('t_student_id_seq'::regclass),
  "name" varchar(40) COLLATE "pg_catalog"."default",
  CONSTRAINT "t_student_pkey" PRIMARY KEY ("id")
);

对于已建好的表,更改主键字段设置即可

ALTER TABLE "public"."t_student" ALTER COLUMN "id" SET DEFAULT 
nextval('t_student_id_seq'::regclass);

方法二:将主键字段定义为serial4类型

    CREATE TABLE "public"."t_student_id_seq" (
      "id" serial4,
      "name" varchar(40),
      PRIMARY KEY ("id")
    );

查看DDL,会发现方法一和方法二结构是一致的,不同的是方法一定义的序列在表删除时,不会被清除。

2、创建uuid为主键
检查postgresql是否支持uuid自动生成函数

select uuid_generate_v4();

若查询报错,创建扩展

create extension "uuid-ossp";

创建表,主键添加uuid生成函数

CREATE TABLE "public"."t_uuid" (
  "id" varchar(36) COLLATE "pg_catalog"."default" NOT NULL DEFAULT uuid_generate_v4(),
  "name" varchar(40) COLLATE "pg_catalog"."default",
  CONSTRAINT "t_uuid_pkey" PRIMARY KEY ("id")
);

对于已经建好的表,更改主键字段设置

ALTER TABLE "public"."t_uuid" ALTER COLUMN "id" SET DEFAULT uuid_generate_v4();
数据库中,主键是表中每一行记录的唯一标识符,通常用于确保数据的唯一性。在设计数据库时,为了保证数据的唯一性和完整性,经常需要设置主键字段。在许多情况下,主键自动生成的,这样可以避免手动分配主键值时可能出现的重复或错误,以及提高数据插入的效率。SQL中实现主键自动生成的方式依赖于所使用的数据库管理系统(DBMS),以下是一些常见的方法: 1. 使用自增字段(Auto Increment):这是最常用的方法,特别是在关系数据库如MySQL、PostgreSQL、SQLite和SQL Server中。创建一个整数类型的字段,并将其设置为自增,每当有新的记录插入时,数据库会自动为这个字段分配一个递增的数值。 例如,在MySQL中创建一个带有自增主键的表: ```sql CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, column1 VARCHAR(255), column2 INT ); ``` 2. 使用序列(Sequence):在Oracle数据库中,经常使用序列来生成主键值。序列可以生成一组连续的数值,可以在插入新记录时引用序列的下一个值作为主键。 例如,在Oracle中创建一个带有序列的表: ```sql CREATE SEQUENCE example_seq START WITH 1 INCREMENT BY 1; CREATE TABLE example_table ( id NUMBER PRIMARY KEY, column1 VARCHAR(255), column2 INT ); INSERT INTO example_table (id, column1, column2) VALUES (example_seq.NEXTVAL, 'example_value', 0); ``` 3. 使用UUID(Universally Unique Identifier):对于分布式系统或需要跨多个数据库或服务生成唯一标识的应用,可能会使用UUID作为主键。UUID是一种可以在全球范围内唯一标识对象的标准方法,它生成的值是由32个十六进制数字组成的字符串,通常用破折号分隔为五组。 例如,在PostgreSQL中使用UUID作为主键: ```sql CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE example_table ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), column1 VARCHAR(255), column2 INT ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值