關於唯一鍵 Unique

2021-05-22 09:01:14 字數 2582 閱讀 6137

sql> create table test_ranbo(id number);

table created

sql> alter table test_ranbo add constraint test_ranbo$uk unique (id);

table altered

sql> insert into test_ranbo(id) values(null);

1 row inserted

sql> insert into test_ranbo(id) values(null);

1 row inserted

可以插入兩個null.

下面建個包含兩列外來鍵的例子。

sql> truncate table test_ranbo;

table truncated

sql> alter table test_ranbo drop constraint test_ranbo$uk;

table altered

sql> alter table test_ranbo add name varchar2(30);

table altered

sql> desc test_ranbo;

name type         nullable default comments

---- ------------ -------- ------- --------

id   number       y                       

name varchar2(30) y                       

sql> alter table test_ranbo add constraint test_ranbo$uk unique (id ,name);

table altered

sql> insert into test_ranbo values(1,null);

1 row inserted

sql> insert into test_ranbo  values(1,null);

insert into test_ranbo  values(1,null)

ora-00001: unique constraint (dbown.test_ranbo$uk) violated

再由測試外來鍵是三列的情況。

sql> truncate table test_ranbo;

table truncated

sql> alter table test_ranbo drop constraint test_ranbo$uk;

table altered

sql> alter table test_ranbo add type varchar2(30);

table altered

sql> desc test_ranbo;

name type         nullable default comments

---- ------------ -------- ------- --------

id   number       y                       

name varchar2(30) y                       

type varchar2(30) y                       

sql> alter table test_ranbo add constraint test_ranbo$uk unique (id,name,type);

table altered

sql> insert into test_ranbo(id,name,type) values(1,null,null);

1 row inserted

sql> /

insert into test_ranbo(id,name,type) values(1,null,null)

ora-00001: unique constraint (dbown.test_ranbo$uk) violated

sql> insert into test_ranbo(id,name,type) values(null,null,null);

1 row inserted

sql> /

1 row inserted

sql> insert into test_ranbo(id,name,type) values(null,'a',null);

1 row inserted

sql> /

insert into test_ranbo(id,name,type) values(null,'a',null)

ora-00001: unique constraint (dbown.test_ranbo$uk) violated

由此可見,在唯一鍵包含兩列以上的情況下,只要有了一列是非null,那麼其他列的null可以理解為乙個確定的值,唯一鍵會起作用,只有唯一鍵的所有列都是null值的時候不管插入多少行相同的記錄唯一鍵都不起作用。

Mysql 唯一鍵約束

3 唯一鍵約束也是分為兩種 4 刪除唯一鍵約束 乙個表中可以有多個唯一鍵約束 唯一鍵約束意味著,唯一,可以為null 唯一鍵的約束名可以自己指定,也可以預設 建立唯一鍵約束,也會在對應列上建立索引。而且刪除唯一鍵約束的方式是通過刪除對應索引來實現的。create table 資料庫名.表名 欄位名1...

主鍵 唯一鍵 唯一索引區別

主鍵 1.可以定義一列或多列為主鍵。不允許空 null 主健可作外健,唯一索引不可 2.定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。唯一鍵 唯一性約束 1.唯一性約束用來限制不受主鍵約束的列上的資料的唯一性,用於作為訪問某行的可選手段,指定列上都不允許有相同的值,允許空 null ...

資料庫 加索引唯一鍵 跟唯一鍵的差別

唯一鍵鍵約束和唯一索引功能是一樣的 唯一性 索引 唯一鍵鍵約束 只是作為一種獨特的約束 如主鍵約束,唯一鍵約束,check約束,外來鍵約束 的一種 以約束的形式管理.但是同時又自動建立了唯一非聚集索引,也就有了索引的效能和部分功能.實際上唯一鍵約束是用唯一索引來約束的。唯一索引 就是一種索引,它對某...