91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

數據庫主鍵約束、唯一約束和唯一索引的區別是什么

發布時間:2022-02-19 13:40:24 來源:億速云 閱讀:371 作者:iii 欄目:開發技術

本篇內容主要講解“數據庫主鍵約束、唯一約束和唯一索引的區別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“數據庫主鍵約束、唯一約束和唯一索引的區別是什么”吧!

主鍵約束(PRIMARY KEY)

  1. 主鍵用于唯一地標識表中的每一條記錄,可以定義一列或多列為主鍵,一個表上僅只能有一個主鍵;

  2. 不建議更新主鍵;

  3. 主鍵列上沒有任何兩行具有相同值(即重復值),且不允許空(NULL);

  4. 主健可作外健,唯一索引不可;

唯一性約束(UNIQUE)

  1. 唯一性約束用來限制不受主鍵約束的列上的數據的唯一性,用于作為訪問某行的可選手段,一個表上可以放置多個唯一性約束;

  2. 只要唯一就可以更新;

  3. 表中任意兩行在指定列上都不允許有相同的值,但允許空(NULL);

唯一索引(UNIQUE INDEX)

  1. 唯一索引可以確保任何生成重復鍵值的嘗試都會失敗;

  2. 只要唯一就可以更新;

  3. 表中任意兩行在指定列上都不允許有相同的值,但允許空(NULL);

唯一性約束和主鍵約束的區別:

  1. 唯一性約束允許在該列上存在NULL值,而主鍵約束的限制更為嚴格,不但不允許有重復,而且也不允許有空值。

唯一約束和唯一索引的區別:

前者是用來檢查數據的正確性,后者用來實現數據查詢的優化,目的不同。
唯一性約束與唯一索引有所不同:

  • 創建唯一約束會在GBase 8s中創建一個constraint,同時也會創建一個該約束對應的唯一索引;

  • 創建唯一索引只會創建一個唯一索引,不會創建constraint;

也就是說其實唯一約束是通過創建唯一索引來實現的。

以下示例來說明這三者之間的區別:
1,創建表、導入基礎數據

drop table if exists tab1;
create table tab1(col1 int, col2 varchar(20), col3 varchar(20));
insert into tab1 values(1,'test001','test001');
insert into tab1 values(2,null,'test002');
insert into tab1 values(3,'test003',null);

2,創建主鍵、唯一約束和唯一索引
主鍵唯一值且不允許為null,唯一約束值唯一但允許null,唯一索引值唯一但允許null

alter table tab1 add constraint primary key(col1) constraint pk_tab1_col1;
alter table tab1 add constraint unique(col2) constraint uk_tab1_col2;
create unique index ux_tab1_col3 on tab1 (col3);

查看表的報告,可以看到三個索引(對應主鍵、唯一約束和唯一索引),但需要注意的是主鍵、唯一約束的索引名稱并不是指定的約束名稱

oncheck -pt testdb:tab1 | grep 'fragment partition'

Index  102_3 fragment partition datadbs01 in DBspace datadbs01
Index  102_4 fragment partition datadbs01 in DBspace datadbs01
Index ux_tab1_col3 fragment partition datadbs01 in DBspace datadbs01

3,測試區別

insert into tab1 values(null,'test004','test004');

將報錯誤:703: Primary key on table (tab1) has a field with a null key value.
不允許空值。

insert into tab1 values(3,'test005','test005');

將報錯誤:268: Unique constraint (gbasedbt.pk_tab1_col1) violated.
違反主鍵約束(pk_tab1_col1),因已經存在值 3 。

insert into tab1 values(4,null,'test006');

將報錯誤:268: Unique constraint (gbasedbt.uk_tab1_col2) violated.
違反唯一約束(uk_tab1_col2),因已經存在值 null 。

insert into tab1 values(5,'test003','test007');

將報錯誤:268: Unique constraint (gbasedbt.uk_tab1_col2) violated.
違反唯一約束(uk_tab1_col2),因已經存在值 test003 。

insert into tab1 values(6,'test008',null);

將報錯誤:239: Could not insert new row - duplicate value in a UNIQUE INDEX column (Unique Index:ux_tab1_col3).
不允許插入重復值,因已經存在值 null 。

insert into tab1 values(7,'test009','test002');

將報錯誤:239: Could not insert new row - duplicate value in a UNIQUE INDEX column (Unique Index:ux_tab1_col3).
不允許插入重復值,因已經存在值 test002 。

insert into tab1 values(8,'test010','test010');

插入成功。

alter table tab1 drop constraint uk_tab1_col2;
oncheck -pt testdb:tab1 | grep 'fragment partition'
Index  102_3 fragment partition datadbs01 in DBspace datadbs01
Index ux_tab1_col3 fragment partition datadbs01 in DBspace datadbs01

刪除約束,對應的索引一并刪除。

細心的你,會發現:

  1. 如果字段加上not null約束,再加上唯一約束或者唯一索引,功能上將等同于主鍵約束;

  2. 唯一約束僅僅比唯一索引多了一個約束;

到此,相信大家對“數據庫主鍵約束、唯一約束和唯一索引的區別是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尤溪县| 峡江县| 济宁市| 威宁| 绥江县| 平乡县| 日土县| 措勤县| 建德市| 山阳县| 昌邑市| 山东| 卫辉市| 额敏县| 鹤岗市| 长寿区| 吐鲁番市| 揭阳市| 册亨县| 三江| 出国| 寿阳县| 肥乡县| 灯塔市| 黑河市| 正定县| 方正县| 民丰县| 凌云县| 汉寿县| 四子王旗| 鸡东县| 岫岩| 崇仁县| 读书| 泾阳县| 云阳县| 平定县| 本溪| 石楼县| 寻乌县|