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)