postgresql筆記013 省缺值

2021-10-06 17:41:06 字數 1924 閱讀 4315

資料定義中的省缺值

乙個字段可以賦予省缺值。如果新建立了乙個資料行,而又寫字段的數值沒有宣告,那麼這些欄位將被填充為他們各自的省缺值。

一條資料修改命令也可以明確地要求把乙個字段設定為它的省缺值,而不需要事先知道這個省缺值是什麼。

如果沒有明確宣告省缺值,那麼省缺值是null。這麼做通常是合理的,因為null表是未知。

在乙個表定義裡,省缺值是在字段資料型別後面列出的。

案例:

create

table products(

product_no integer

, name text

, price numeric

default

20.00

);

省缺值可以是乙個表示式它會在插入省缺值的時候計算。乙個常見的例子是乙個timestamp欄位可能有省缺值 current_timestamp, 它表示插入行的時刻。另外乙個常見的例子是為每一行生成乙個序列號。

在postgresql中,其實現方式:

create

table products(

product_no integer

default nextval(

'products_product_no_seq'),

...)

;

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

create

table products(

product_no serial,.

..);

拓展:

序列號型別

smallserial,serial 和bigserial型別不是真正的型別,只是為在表中建立唯一標識做的概念上的便利。

類其他一些資料庫中的auto_increment屬性。

案例:

create

table tablename(

column

serial

);

等價於宣告下面幾個語句

create sequence tablename_colname_seq;

create

table tablename(

colname integer

notnull

default nextval(

'tablename_colname_seq'))

;alter sequence tablename_colname_seq owned by tablename.colname;

因此,我們就常見了乙個整數字段,並且把它的省缺數值安排為從乙個序列發生器讀取。應用了乙個not null約束以確保 null 不會被插入。

在大多數情況下,我們可能還會附加乙個unique 或者primary key約束避免以外的插入重複的數值,但是這個不是自動的。

最後,將序列發生器從屬於那個字段,這樣當該字段或者表被刪除的時候也一併刪除它。

要在serial欄位中插入序列中的下乙個數值,主要是要注意serial欄位應該賦予省缺值。

我們可以通過在insert語句中把該字段排除在字段列表之外來實現,也可以通過使用default關鍵字來實現。

型別名serial和serial4是等效的,兩者都建立integer欄位。型別名bigserial和serial8也一樣,只不過他建立乙個bigint欄位。如果你預估在表的生存期中使用的表示數目可能超過2的31次方個,那麼你應該使用bigserial。 型別名smallserial和seria2是一樣,只不過它建立乙個smallint欄位。

乙個serial型別常見的序列在所屬的字段被刪除的時候自動刪除。我們可以只刪除徐磊而不刪除字段,不過這將刪除該字段的省缺值表示式。

postgresql筆記幾則

1.select count from a,統計所有資料報括null資料,這裡會使用到聚合索引,如果判斷聚合索引可以加快速度.2.select count a from a,這裡統計a列資料,除去null資料,如果select count 1 from a,之類的引數非表a列統 計所有資料.3.se...

python學習筆記013 內建函式dir

dir 函式 不帶引數時,返回當前範圍內的變數 方法和定義的型別列表 帶引數時,返回引數的屬性 方法列表。如果引數包含方法 dir 該方法將被呼叫。如果引數不包含 dir 該方法將最大限度地收集引數資訊。或 1.如果沒有引數呼叫,則返回當前作用域的所有變數的列表 2.如果給定乙個物件作為引數,則返回...

程式設計素養013

談談你對ajax 的理解?概念 特點 作用 select 教師號,sum case when 星期號 1 and 是否有課 有 then 1 else 0 end as 星期一,sum case when 星期號 2 and 是否有課 有 then 1 else 0 end as 星期二,sum c...