人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

GBase?8s數(shù)據(jù)庫主鍵約束、唯一約束和唯一索引的區(qū)別解析

發(fā)布日期:2022-07-15 19:02 | 文章來源:源碼之家

主鍵約束(PRIMARY KEY)

  1. 主鍵用于唯一地標(biāo)識表中的每一條記錄,可以定義一列或多列為主鍵,一個(gè)表上僅只能有一個(gè)主鍵;
  2. 不建議更新主鍵;
  3. 主鍵列上沒有任何兩行具有相同值(即重復(fù)值),且不允許空(NULL);
  4. 主健可作外健,唯一索引不可;

唯一性約束(UNIQUE)

  1. 唯一性約束用來限制不受主鍵約束的列上的數(shù)據(jù)的唯一性,用于作為訪問某行的可選手段,一個(gè)表上可以放置多個(gè)唯一性約束;
  2. 只要唯一就可以更新;
  3. 表中任意兩行在指定列上都不允許有相同的值,但允許空(NULL);

唯一索引(UNIQUE INDEX)

  1. 唯一索引可以確保任何生成重復(fù)鍵值的嘗試都會失敗;
  2. 只要唯一就可以更新;
  3. 表中任意兩行在指定列上都不允許有相同的值,但允許空(NULL);

唯一性約束和主鍵約束的區(qū)別:

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

唯一約束和唯一索引的區(qū)別:

前者是用來檢查數(shù)據(jù)的正確性,后者用來實(shí)現(xiàn)數(shù)據(jù)查詢的優(yōu)化,目的不同。
唯一性約束與唯一索引有所不同:

  • 創(chuàng)建唯一約束會在GBase 8s中創(chuàng)建一個(gè)constraint,同時(shí)也會創(chuàng)建一個(gè)該約束對應(yīng)的唯一索引;
  • 創(chuàng)建唯一索引只會創(chuàng)建一個(gè)唯一索引,不會創(chuàng)建constraint;

也就是說其實(shí)唯一約束是通過創(chuàng)建唯一索引來實(shí)現(xiàn)的。

以下示例來說明這三者之間的區(qū)別:
1,創(chuàng)建表、導(dǎo)入基礎(chǔ)數(shù)據(jù)

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,創(chuàng)建主鍵、唯一約束和唯一索引
主鍵唯一值且不允許為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);

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

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,測試區(qū)別

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

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

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

將報(bào)錯(cuò)誤:268: Unique constraint (gbasedbt.pk_tab1_col1) violated.
違反主鍵約束(pk_tab1_col1),因已經(jīng)存在值 3 。

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

將報(bào)錯(cuò)誤:268: Unique constraint (gbasedbt.uk_tab1_col2) violated.
違反唯一約束(uk_tab1_col2),因已經(jīng)存在值 null 。

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

將報(bào)錯(cuò)誤:268: Unique constraint (gbasedbt.uk_tab1_col2) violated.
違反唯一約束(uk_tab1_col2),因已經(jīng)存在值 test003 。

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

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

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

將報(bào)錯(cuò)誤:239: Could not insert new row - duplicate value in a UNIQUE INDEX column (Unique Index:ux_tab1_col3).
不允許插入重復(fù)值,因已經(jīng)存在值 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

刪除約束,對應(yīng)的索引一并刪除。

細(xì)心的你,會發(fā)現(xiàn):

  1. 如果字段加上not null約束,再加上唯一約束或者唯一索引,功能上將等同于主鍵約束;
  2. 唯一約束僅僅比唯一索引多了一個(gè)約束;

到此這篇關(guān)于GBase 8s數(shù)據(jù)庫主鍵約束、唯一約束和唯一索引的區(qū)別的文章就介紹到這了,更多相關(guān)GBase 8s數(shù)據(jù)庫主鍵內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

海外服務(wù)器租用

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部