日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)PostgreSQL教程PostgreSQL約束

PostgreSQL 約束

PostgreSQL 約束用于規(guī)定表中的數(shù)據(jù)規(guī)則。

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先制作網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有單縣免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

如果存在違反約束的數(shù)據(jù)行為,行為會被約束終止。

約束可以在創(chuàng)建表時規(guī)定(通過 CREATE TABLE 語句),或者在表創(chuàng)建之后規(guī)定(通過 ALTER TABLE 語句)。

約束確保了數(shù)據(jù)庫中數(shù)據(jù)的準(zhǔn)確性和可靠性。

約束可以是列級或表級。列級約束僅適用于列,表級約束被應(yīng)用到整個表。

以下是在 PostgreSQL 中常用的約束。

  • NOT NULL:指示某列不能存儲 NULL 值。
  • UNIQUE:確保某列的值都是唯一的。
  • PRIMARY Key:NOT NULL 和 UNIQUE 的結(jié)合。確保某列(或兩個列多個列的結(jié)合)有唯一標(biāo)識,有助于更容易更快速地找到表中的一個特定的記錄。。
  • FOREIGN Key: 保證一個表中的數(shù)據(jù)匹配另一個表中的值的參照完整性。
  • CHECK: 保證列中的值符合指定的條件。
  • EXCLUSION :排他約束,保證如果將任何兩行的指定列或表達(dá)式使用指定操作符進(jìn)行比較,至少其中一個操作符比較將會返回 false 或空值。

NOT NULL 約束

默認(rèn)情況下,列可以保存為 NULL 值。如果您不想某列有 NULL 值,那么需要在該列上定義此約束,指定在該列上不允許 NULL 值。

NULL 與沒有數(shù)據(jù)是不一樣的,它代表著未知的數(shù)據(jù)。

實(shí)例

下面實(shí)例創(chuàng)建了一張新表叫 COMPANY1,添加了 5 個字段,其中三個 ID,NAME,AGE 設(shè)置不接受空置:

CREATE TABLE COMPANY1(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

UNIQUE 約束

UNIQUE 約束可以設(shè)置列是唯一的,避免同一列出現(xiàn)重復(fù)值。

實(shí)例

下面實(shí)例創(chuàng)建了一張新表叫 COMPANY3,添加了 5 個字段,其中 AGE 設(shè)置為 UNIQUE,因此你不能添加兩條有相同年齡的記錄:

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

PRIMARY KEY

在設(shè)計(jì)數(shù)據(jù)庫時,PRIMARY KEY 非常重要。

PRIMARY KEY 稱為主鍵,是數(shù)據(jù)表中每一條記錄的唯一標(biāo)識。

設(shè)置 UNIQUE 的列可能有多個,但是一張表只有一列可以設(shè)置 PRIMARY KEY。

我們可以使用主鍵來引用表中的行,也可以通過把主鍵設(shè)置為其他表的外鍵,來創(chuàng)建表之間的關(guān)系。

主鍵是非空約束和唯一約束的組合。

一個表只能有一個主鍵,它可以由一個或多個字段組成,當(dāng)多個字段作為主鍵,它們被稱為復(fù)合鍵。

如果一個表在任何字段上定義了一個主鍵,那么在這些字段上不能有兩個記錄具有相同的值。

實(shí)例

下面我們創(chuàng)建 COMAPNY4 表,其中 ID 作為主鍵:

CREATE TABLE COMPANY4(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

FOREIGN KEY 約束

FOREIGN KEY 即外鍵約束,指定列(或一組列)中的值必須匹配另一個表的某一行中出現(xiàn)的值。

通常一個表中的 FOREIGN KEY 指向另一個表中的 UNIQUE KEY(唯一約束的鍵),即維護(hù)了兩個相關(guān)表之間的引用完整性。

實(shí)例

下面實(shí)例創(chuàng)建了一張 COMPANY6 表,并添加了5個字段:

CREATE TABLE COMPANY6(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

下面實(shí)例創(chuàng)建一張 DEPARTMENT1 表,并添加 3 個字段,EMP_ID 就是外鍵,參照 COMPANY6 的 ID:

CREATE TABLE DEPARTMENT1(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      references COMPANY6(ID)
);

CHECK 約束

CHECK 約束保證列中的所有值滿足某一條件,即對輸入一條記錄要進(jìn)行檢查。如果條件值為 false,則記錄違反了約束,且不能輸入到表。

實(shí)例

例如,下面實(shí)例建一個新的表 COMPANY5,增加了五列。在這里,我們?yōu)?SALARY 列添加 CHECK,所以工資不能為零:

CREATE TABLE COMPANY5(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

EXCLUSION 約束

EXCLUSION 約束確保如果使用指定的運(yùn)算符在指定列或表達(dá)式上比較任意兩行,至少其中一個運(yùn)算符比較將返回 false 或 null。

實(shí)例

下面實(shí)例創(chuàng)建了一張 COMPANY7 表,添加 5 個字段,并且使用了 EXCLUDE 約束。

CREATE TABLE COMPANY7(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT,
   AGE            INT  ,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   EXCLUDE USING gist
   (NAME WITH =,  -- 如果滿足 NAME 相同,AGE 不相同則不允許插入,否則允許插入
   AGE WITH <>)   -- 其比較的結(jié)果是如果整個表達(dá)式返回 true,則不允許插入,否則允許
);

這里,USING gist 是用于構(gòu)建和執(zhí)行的索引一種類型。

您需要為每個數(shù)據(jù)庫執(zhí)行一次 CREATE EXTENSION btree_gist 命令,這將安裝 btree_gist 擴(kuò)展,它定義了對純標(biāo)量數(shù)據(jù)類型的 EXCLUDE 約束。

由于我們已經(jīng)強(qiáng)制執(zhí)行了年齡必須相同,讓我們通過向表插入記錄來查看這一點(diǎn):

INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
-- 此條數(shù)據(jù)的 NAME 與第一條相同,且 AGE 與第一條也相同,故滿足插入條件
INSERT INTO COMPANY7 VALUES(3, 'Allen', 42, 'California', 20000.00 );
-- 此數(shù)據(jù)與上面數(shù)據(jù)的 NAME 相同,但 AGE 不相同,故不允許插入

前面兩條順利添加的 COMPANY7 表中,但是第三條則會報錯:

ERROR:  conflicting key value violates exclusion constraint "company7_name_age_excl"
DETAIL:  Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).

刪除約束

刪除約束必須知道約束名稱,已經(jīng)知道名稱來刪除約束很簡單,如果不知道名稱,則需要找到系統(tǒng)生成的名稱,使用 \d 表名 可以找到這些信息。

通用語法如下:

ALTER TABLE table_name DROP CONSTRAINT some_name;

文章題目:創(chuàng)新互聯(lián)PostgreSQL教程PostgreSQL約束
當(dāng)前路徑:http://www.5511xx.com/article/cosigej.html