欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PostgreSQL中實(shí)現(xiàn)自增的三種方式舉例

 更新時(shí)間:2024年02月26日 10:50:16   作者:天真的柏拉圖  
很多小伙伴在把mysql數(shù)據(jù)庫里面的表導(dǎo)入pgsql數(shù)據(jù)庫的時(shí)候,會(huì)遇到新增數(shù)據(jù)的時(shí)候id不自增,這篇文章主要給大家介紹了關(guān)于PostgreSQL中實(shí)現(xiàn)自增的三種方式,需要的朋友可以參考下

PG中實(shí)現(xiàn)自增字段的三種方式:

  • 標(biāo)識(shí)列 (IDENTITY)
  • 序列 (SEQUENCE)
  • Serial類型

自增字段主要用于實(shí)現(xiàn)自增主鍵或生成唯一版本號(hào)

1.1 標(biāo)識(shí)列 (IDENTITY)

標(biāo)識(shí)列是SQL標(biāo)準(zhǔn)推薦實(shí)現(xiàn)自增的方式

示例

CREATE TABLE t_user (
    user_id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY ,
    user_name varchar(50) NOT NULL UNIQUE
)
INSERT INTO t_user (user_name) value ('tony')

說明:

  • 創(chuàng)建一個(gè)名為t_user的表 CREATE TABLE t_user ()

  • 字段user_id為integer類型 user_id integer

    定義為標(biāo)識(shí)列且總是按照標(biāo)識(shí)列生成(由系統(tǒng)生成) GENERATED ALWAYS AS IDENTITY

    定義為主鍵 PRIMARY KEY

  • 字段user_name為varchar類型

    約束其不為空且唯一 NOT NULL UNIQUE

  • 插入一條數(shù)據(jù) INSERT INTO t_user (user_name) value (‘tony’)

    由于user_id是使用標(biāo)識(shí)列實(shí)現(xiàn)的自增主鍵 由系統(tǒng)賦值 因此插入時(shí)只需指定user_name的值即可

原理

定義標(biāo)識(shí)列之后系統(tǒng)后臺(tái)會(huì)自動(dòng)創(chuàng)建并維護(hù)一個(gè)名為tablename_column_seq的序列 基于此序列生成自增數(shù)據(jù)

-- SEQUENCE: public.t_user_user_id_seq

-- DROP SEQUENCE IF EXISTS public.t_user_user_id_seq;

CREATE SEQUENCE IF NOT EXISTS public.t_user_user_id_seq
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 2147483647
    CACHE 1;

ALTER SEQUENCE public.t_user_user_id_seq
    OWNER TO postgres;

表刪除后序列隨之刪除 該實(shí)現(xiàn)方式下表和序列是關(guān)聯(lián)關(guān)系 DROP TABLE t_user

1.2 序列 (SEQUENCE)

通過定義序列的方式實(shí)現(xiàn)自增字段 需要在創(chuàng)建表之前先定義一個(gè)序列

示例

先定義序列

CREATE SEQUENCE IF NOT EXISTS public.t_user_user_id_seq
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 2147483647
    CACHE 1
    NO CYCLE

說明:

  • 創(chuàng)建一個(gè)名為表名_自增字段名_seq的序列 CREATE SEQUENCE IF NOT EXISTS public.t_user_user_id_seq
  • 參數(shù):
    • INCREMENT 1:序列每次自增多少
    • START 1:從1開始
    • MINVALUE 1:序列的最小值
    • MAXVALUE 2147483647:序列的最大值
    • CACHE 1:緩存序列 但是服務(wù)器重啟之后緩存會(huì)丟失
    • NO CYCLE / CYCLE:是否循環(huán) 序列增長到最大值之后是否從新開始 NO CYCLE表示不重新開始

再創(chuàng)建表

CREATE TABLE t_user (
    user_id integer DEFAULT nextval('t_user_user_id_seq') PRIMARY KEY ,
    user_name varchar(50) NOT NULL UNIQUE
)

說明:

DEFAULT nextval('t_user_user_id_seq'):默認(rèn)值為t_user_user_id_seq序列的下一個(gè)值

nextval(‘序列’)——獲取序列的下一個(gè)值

currval(‘序列’)——獲取序列的當(dāng)前值

刪除表時(shí)序列不會(huì)隨之刪除 仍會(huì)保留下來

刪除語句:DROP SEQUENCE IF EXISTS public.t_user_user_id_seq;

1.3 Serial

示例

CREATE TABLE t_user (
    user_id serial PRIMARY KEY ,
    user_name varchar(50) NOT NULL UNIQUE
)

原理

系統(tǒng)自動(dòng)生成一個(gè)序列與表相關(guān)聯(lián)

CREATE TABLE IF NOT EXISTS public.t_user
(
    user_id integer NOT NULL DEFAULT nextval('t_user_user_id_seq'::regclass),
    user_name character varying(50) COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT t_user_pkey PRIMARY KEY (user_id),
    CONSTRAINT t_user_user_name_key UNIQUE (user_name)
)

刪除表時(shí)序列會(huì)隨之一起刪除

附:修改已有表主鍵為自增

已有表結(jié)構(gòu)

CREATE TABLE student
(
    id   int4 PRIMARY KEY,
    name VARCHAR
);

 創(chuàng)建序列:代碼中的1表示此主鍵從1開始,注意:如果項(xiàng)目中的表已經(jīng)有數(shù)據(jù),那么START 后邊的數(shù)字一定要比數(shù)據(jù)庫中的主鍵字段的最大值要大或者相同

CREATE SEQUENCE student_id_seq START 1;

修改主鍵默認(rèn)值

ALTER TABLE student
    ALTER COLUMN id SET DEFAULT nextval('student_id_seq'::regclass);

總結(jié)

到此這篇關(guān)于PostgreSQL中實(shí)現(xiàn)自增的三種方式的文章就介紹到這了,更多相關(guān)PostgreSQL實(shí)現(xiàn)自增方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL 恢復(fù)誤刪數(shù)據(jù)的操作

    PostgreSQL 恢復(fù)誤刪數(shù)據(jù)的操作

    這篇文章主要介紹了PostgreSQL 恢復(fù)誤刪數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL中調(diào)用存儲(chǔ)過程并返回?cái)?shù)據(jù)集實(shí)例

    PostgreSQL中調(diào)用存儲(chǔ)過程并返回?cái)?shù)據(jù)集實(shí)例

    這篇文章主要介紹了PostgreSQL中調(diào)用存儲(chǔ)過程并返回?cái)?shù)據(jù)集實(shí)例,本文給出一創(chuàng)建數(shù)據(jù)表、插入測(cè)試數(shù)據(jù)、創(chuàng)建存儲(chǔ)過程、調(diào)用創(chuàng)建存儲(chǔ)過程和運(yùn)行效果完整例子,需要的朋友可以參考下
    2015-01-01
  • PostgreSQL實(shí)現(xiàn)一個(gè)通用標(biāo)簽系統(tǒng)

    PostgreSQL實(shí)現(xiàn)一個(gè)通用標(biāo)簽系統(tǒng)

    這篇文章主要給大家介紹了關(guān)于利用PostgreSQL實(shí)現(xiàn)一個(gè)通用標(biāo)簽系統(tǒng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • PostgreSQL查找并刪除重復(fù)數(shù)據(jù)的方法總結(jié)

    PostgreSQL查找并刪除重復(fù)數(shù)據(jù)的方法總結(jié)

    這篇文章主要給大家介紹了PostgreSQL查找并刪除重復(fù)數(shù)據(jù)的方法,文章通過代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一點(diǎn)的幫助,需要的朋友可以參考下
    2023-10-10
  • postgresql插入后返回id的操作

    postgresql插入后返回id的操作

    這篇文章主要介紹了postgresql插入后返回id的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL表膨脹監(jiān)控案例(精確計(jì)算)

    PostgreSQL表膨脹監(jiān)控案例(精確計(jì)算)

    這篇文章主要介紹了PostgreSQL表膨脹監(jiān)控案例(精確計(jì)算),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 常用?PostgreSQL?預(yù)防數(shù)據(jù)丟失解決方案

    常用?PostgreSQL?預(yù)防數(shù)據(jù)丟失解決方案

    這篇文章主要介紹了常用?PostgreSQL?預(yù)防數(shù)據(jù)丟失方案,本篇主要介紹關(guān)于?DDL?和?DML?操作,如何預(yù)防數(shù)據(jù)丟失的方案,需要的朋友可以參考下
    2022-01-01
  • postgresql 賦權(quán)語句 grant的正確使用說明

    postgresql 賦權(quán)語句 grant的正確使用說明

    這篇文章主要介紹了postgresql 賦權(quán)語句 grant的正確使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL 自動(dòng)Vacuum配置方式

    PostgreSQL 自動(dòng)Vacuum配置方式

    這篇文章主要介紹了PostgreSQL 自動(dòng)Vacuum配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 使用postgresql獲取當(dāng)前或某一時(shí)間段的年月日

    使用postgresql獲取當(dāng)前或某一時(shí)間段的年月日

    這篇文章主要給大家介紹了關(guān)于使用postgresql獲取當(dāng)前或某一時(shí)間段的年月日的相關(guān)資料,在PostgreSQL中可以使用函數(shù) NOW() 來查詢當(dāng)前時(shí)間,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07

最新評(píng)論