Postgresql主鍵自增

2021-08-27 12:26:45 字數 1532 閱讀 7822

主鍵約束只是唯一約束和非空約束的組合。所以,下面兩個表定義是等價的:

create table products (

product_no integer unique not null,

name text,

price numeric

);

create table products (

product_no integer primary key,

name text,

price numeric

);

主鍵也可以約束多於乙個字段;其語法類似於唯一約束:

create table example (

a integer,

b integer,

c integer,

primary key (a, c)

);

主鍵表示乙個或多個欄位的組合可以用於唯一標識表中的資料行。這是定義乙個主鍵的直接結果。請注意:乙個唯一約束( unique constraint )實際上並不能提供乙個唯一標識,因為它不排除 null 。

乙個表最多可以有乙個主鍵(但是它可以有多個唯一和非空約束)。關係型資料庫理論告訴我們,每個表都必須有乙個主鍵。postgresql 並不強制這個規則,但我們最好還是遵循它。

值得注意的是,sqlite中,主鍵是自動 增長的

在mysqli中,需要加乙個auto_increment 標誌

在postgres中,有乙個專門的型別 叫做serial的,來表示自動增加

為每一行生成乙個」序列號(serial number)「。在 postgresql 裡,通常是用類似下面這樣的方法生成的:

create table products (

product_no integer default nextval('products_product_no_seq'),

...);

這裡的 nextval() 從乙個序列物件(sequence object)提供後繼的數值。這種做法非常普遍,以至於我們有乙個專門的縮寫用於此目的:

create table products (

product_no serial,

...);

其實, 自動增加 欄位是 default欄位 的一種特殊情況

可以在建立表之後,再次建立sequence

create sequence event_id_seq

start with 1

increment by 1

no minvalue

no maxvalue

cache 1;

alter table event alter column id set default nextval('event_id_seq');

或者修改字段型別

alter table event alter column id type serial;

新增主鍵

alter table charge add primary key (id);

mysql 主鍵自增語句 MySQL 自增主鍵

以下僅考慮 innodb 儲存引擎。自增主鍵有兩個性質需要考慮 單調性每次插入一條資料,其 id 都是比上一條插入的資料的 id 大,就算上一條資料被刪除。連續性插入成功時,其資料的 id 和前一次插入成功時資料的 id 相鄰。自增主鍵的單調性 為何會有單調性的問題?這主要跟自增主鍵最大值的獲取方式...

MySQL設定主鍵自增和非主鍵自增

mysql 每張表只能有1個自動增長字段,這個自動增長字段即可作為主鍵,也可以用作非主鍵使用,但是請注意將自動增長字段當做非主鍵使用時必須必須為其新增唯一索引,否則系統將會報錯。例如 將自動增長字段設定為主鍵 create table t1 id int auto increment primary...

Oracle主鍵自增

1.建立資料表 create table test increase userid number 10 primary key,主鍵,自動增加 username varchar2 20 2.建立自動增長序列 create sequence testincrease sequence incremen...