當我們在建立主鍵約束的時候,會自動建立乙個唯一索引(唯一約束也是如此)
其實對於主鍵約束而言,它是非空約束+唯一約束的組合。而自動建立的唯一索引,就是用來實現唯一性這一規則的。
當我們disable掉主鍵約束後,它會自動刪掉當初自動建立的唯一索引。
同理,當我們enable主鍵後,它又會自動建立唯一索引。
另外,當我們disable約束後,像主鍵中插入null值後是被允許的,但當我們再次enable主鍵約束,便會報錯:
sql> insert into test values(null);
1 row created.
sql> commit;
commit complete.
sql> alter table test enable constraint pk_id;
alter table test enable constraint pk_id
*error at line 1:
ora-02437: cannot validate (sys.pk_id) - primary key violated
所以,對於約束enable過程,又涉及到乙個對原有資料是否做約束檢查問題。
對於上述情況,可以novalidate,即允許原有資料中存在不符合主鍵約束的值:
sql> alter table test enable novalidate constraint pk_id;
table altered.
但是,約束啟用後,就不允許有違反約束的值了
sql> insert into test values(null);
insert into test values(null)
*error at line 1:
ora-01400: cannot insert null into ("sys"."test"."id")
記錄一些細節,有時候真是記不清。
主鍵 約束和索引
1 主鍵約束不允許出現 null 值。任何索引條目的索引鍵都不允許包含null。唯一約束允許包含 null 值,但唯一約束把兩個 null 值當作重複值,所以施加了唯一約束的每一列只允許包含乙個 null 值。2 建立主鍵時會自動建立聚集索引,除非當前表中已經含有了聚集索引或是建立主鍵時指定了 no...
關於IOC和DI討論
這是直接擷取的ppt的內容,我真不知道這樣來描述這所謂的2個概念需要讓看客們如何理解.同時我們可以去看看 martin fowler的 inversion of control containers and the dependency injection pattern 或者中文版本 在這個文章中...
SQL 主鍵和外來鍵約束
sql 的主鍵和外來鍵的作用 外來鍵取值規則 空值或參照的主鍵值。1 插入非空值時,如果主鍵表中沒有這個值,則不能插入。2 更新時,不能改為主鍵表中沒有的值。3 刪除主鍵表記錄時,你可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。4 更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。簡而言之,s...