最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

標(biāo)識列是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)識列且總是按照標(biāo)識列生成(由系統(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í)現(xiàn)的自增主鍵 由系統(tǒng)賦值 因此插入時(shí)只需指定user_name的值即可

原理

定義標(biāo)識列之后系統(tǒ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ù)器重啟之后緩存會丟失
    • 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í)序列不會隨之刪除 仍會保留下來

刪除語句: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)自動生成一個(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í)序列會隨之一起刪除

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

已有表結(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

乐都县| 阿拉善右旗| 阜阳市| 中方县| 蒲江县| 浠水县| 田林县| 大安市| 白山市| 静海县| 鄂托克前旗| 始兴县| 同心县| 岢岚县| 盘锦市| 新巴尔虎左旗| 海安县| 舞钢市| 鸡东县| 安溪县| 建始县| 乃东县| 泗洪县| 集贤县| 巴里| 金寨县| 韶关市| 巴彦淖尔市| 和政县| 新绛县| 贺兰县| 绍兴市| 疏勒县| 农安县| 开远市| 山东省| 白水县| 二连浩特市| 乐平市| 利津县| 调兵山市|