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

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

 更新時(shí)間:2024年02月26日 10:50:16   作者:天真的柏拉圖  
很多小伙伴在把mysql數(shù)據(jù)庫(kù)里面的表導(dǎo)入pgsql數(shù)據(jù)庫(kù)的時(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')

說(shuō)明:

  • 創(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)

通過(guò)定義序列的方式實(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

說(shuō)明:

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

再創(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
)

說(shuō)明:

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

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

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

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

刪除語(yǔ)句: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開(kāi)始,注意:如果項(xiàng)目中的表已經(jīng)有數(shù)據(jù),那么START 后邊的數(shù)字一定要比數(shù)據(jù)庫(kù)中的主鍵字段的最大值要大或者相同

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)文章

最新評(píng)論

常宁市| 龙州县| 荃湾区| 奉贤区| 公安县| 盐津县| 永吉县| 辉南县| 额尔古纳市| 靖江市| 湖南省| 嘉兴市| 宜兴市| 盐山县| 阜康市| 永仁县| 昌黎县| 莫力| 甘谷县| 河曲县| 博客| 五原县| 榆林市| 雷州市| 绍兴县| 玉田县| 普兰县| 曲靖市| 修武县| 霍山县| 彭水| 汽车| 金川县| 庆元县| 敦煌市| 民乐县| 政和县| 台南市| 龙游县| 彝良县| 抚远县|