PostgreSQL創建自增列


PostgreSQL SERIAL創建自增列

Navicat中新建ID自增列,類型選擇series保存即可

PostgreSQL序列是一種特殊的用於生產整數序列數據庫對象。序列通常用於主鍵列,與mysql的AUTO_INCREMENT 概念類似。創建表時使用serial偽類型定義序列:

CREATE TABLE table_name(
    id SERIAL  
);

賦值serial偽類型給id列,PostgreSQL將執行下列步驟:

  • 創建序列對象並設置下一個生成值作為列的缺省值。
  • 給對應列增加NOT NULL約束,因為序列總是生成一個整數值,不能為null值。
  • 賦值序列的擁有者給id列,因此當id列或表被刪除時,序列對象自動被刪除。

相當於執行了下面語句:

CREATE SEQUENCE table_name_id_seq;
 
CREATE TABLE table_name (
    id integer NOT NULL DEFAULT nextval('tablename_id_seq'::regclass)
);
 
ALTER SEQUENCE table_name_id_seq
OWNED BY table_name.id;

PostgresQL SERIAL示例

特別需要注意的是,serial列不會隱式在列上創建索引或是該列為主鍵列。當然可以很容易使用PRIMARY KEY關鍵字增加相應約束。

CREATE TABLE fruits(
   id SERIAL PRIMARY KEY,
   name VARCHAR NOT NULL
);

在insert語句中,可以忽略對應列或使用default關鍵字都可以給serial賦值

INSERT INTO fruits(name) VALUES('orange');

或者:

INSERT INTO fruits(id,name) VALUES(DEFAULT,'apple');

使用pg_get_serial_sequence函數可以獲得serial列的序列名稱:

pg_get_serial_sequence('table_name','column_name')

通過給currval函數傳入序列名稱可以獲得當前生成的值

SELECT currval(pg_get_serial_sequence('fruits', 'id'));

當執行insert語句時,你想獲得序列生成的值,可以在insert語句中使用RETURNING id子句實現。下面語句插入一行新的記錄,並返回id列生成的值:

INSERT INTO fruits(name) VALUES('banana')
RETURNING id;

結果如下:

id
----
3
(1 row)

原文鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM