主鍵:
1.主鍵約束: 一個表只能有一個主鍵約束。主鍵可以是單個字段,也可以是多個字段。無論是哪種情況,其所有字段都是NOT NULL。
2.Unique約束:一個表可以有多個Unique約束,Unique的字段可以為NULL。
3.主鍵與Unique:不同點在於一個表只能有一個主鍵約束,但是可以有多個Unique約束;主鍵所有字段都是not null,unique可以是
null;相同點在於都能保證唯一性。
4.主鍵、Unique與索引:主鍵約束與Unique約束默認會成為索引。當主鍵和Unique有多個字段時,有索引前綴性問題,即where語
句中的條件必須有主鍵或者unique的第一個字段,否則不會使用索引。
5. 外鍵與主鍵、Unique:外鍵必須為另外一張表(父表)的主鍵或者唯一索引。如果要添加記錄,而父表中沒有則報錯。反之,如
果要刪除父表中的記錄,而子表中有記錄,也會報錯。但是如果在創建外鍵約束時,如果使用on delete cascade,則刪除父表中數據時
,不報錯而直接把子表關聯的數據刪除。
如果要刪除父表,則需要加上cascade constraints,此時子表的foreign key被去除,表中記錄保持不變。
外鍵:
外鍵是該表是另一個表之間聯接的字段
外鍵必須為另一個表中的主鍵
外鍵的用途是確保數據的完整性。它通常包括以下幾種:
實體完整性,確保每個實體是唯一的(通過主鍵來實施).
oracle主鍵的設置方法有2種:
一種是設置自增長主鍵,另一種是生成唯一序列;
1.自增長主鍵
SQL> create table Prim_key_Increase_Test(
2 id number(10) primary key,
3 name varchar2(30)
4 );
表已創建。
SQL> create sequence Prim_key_Incre_Sequence
2 minvalue 1
3 nomaxvalue
4 start with 1
5 increase by 1
6 nocycle
7 nocache;
increase by 1
*
第 5 行出現錯誤:
ORA-00933: SQL 命令未正確結束
SQL> 5
5* increase by 1
SQL> c /increase/increment/
5* increment by 1
SQL> r
1 create sequence Prim_key_Incre_Sequence
2 minvalue 1
3 nomaxvalue
4 start with 1
5 increment by 1
6 nocycle
7* nocache
序列已創建。
SQL> create trigger Prim_key_trigger before
2 insert on Prim_key_Increase_Test for each row
3 begin
4 select Prim_key_Incre_Sequence.nextval into:New.id from dual;
5 end;
6 /
觸發器已創建
SQL> commit;
提交完成。
SQL> insert into Prim_key_Increase_Test(id) values('181');
已創建 1 行。
SQL> select * from Prim_key_Increase_Test;
ID NAME
---------- ------------------------------
1
SQL> insert into Prim_key_Increase_Test(id) values('181');
已創建 1 行。
SQL> insert into Prim_key_Increase_Test(id) values('181');
已創建 1 行。
SQL> select * from Prim_key_Increase_Test;
ID NAME
---------- ------------------------------
1
2
3