




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 一、 數(shù)據(jù)庫約束的作用和分類 primarykey 和unique他們的作用是為了不讓表中有重復(fù)的數(shù)據(jù)(一個表) check表示表中列的數(shù)據(jù)的范圍性的定義(一個表) defult表示表中的默認值 foreignkey 表與表之間的聯(lián)系(兩個或兩個以上的表)【unique是可以包含null值的,并且一個表中可以有多個unique constraint而primarykey在一個表中只能有一個.并且不能有null值】二、針對約束創(chuàng)建有兩種不同的思想 第一、創(chuàng)建標的時候一同將約束創(chuàng)建了 第二、你的表已經(jīng)創(chuàng)建好了,向表中添加約束 三、下面我就一一的介紹他們 一、 primary key 主鍵約束 兩
2、種寫法 在已經(jīng)創(chuàng)建的表中添加約束 解釋:添加約束的時候一定要修改表故用(alter修改) Alter table table1 Add primary key (列名1,列名2) 同表一起創(chuàng)建 Create table table1 (列名1 數(shù)據(jù)類型 是否為空 primary key , 列名1 數(shù)據(jù)類型 是否為空 ) 上面的是兩種情景為一個字段設(shè)置主鍵,接下來是以多個列作為主鍵。 Create table table1 ( 列名1 數(shù)據(jù)類型 是否為空, 列名2 數(shù)據(jù)類型 是否為空, 列名3 數(shù)據(jù)類型 是否為空, Primary key (列名1 ,列名2) ) 二、Check約束 這個和主
3、鍵約束差不多 Alter table table1 Add unique(列名) 三、外鍵約束 好多的同學(xué)一直也都不理解外鍵約束,到底什么才是外鍵?主鍵在那個表上?外鍵在那個表上?用T-SQL語句寫的時候是主表在前,還是外間表在前?等等一系列的問題! 接下來我講給大家說說這個主外鍵到底怎么弄的。 其實,主外鍵之間正如它的名字一樣,他們之間有一個主從關(guān)系,一個主表,一個從表,主表上面設(shè)置的是主鍵,從表上面設(shè)置的是外鍵(foreign key),主鍵表中的數(shù)據(jù)發(fā)生變化的時,外鍵(foreign key)表的數(shù)據(jù)立刻就發(fā)生改變。 向已有的表中添加一個主鍵(沒有就是添加,添加就是修改表) Alter
4、table table1 Add foreign key (列名1)references table2(列名2) 創(chuàng)建表的時候一同創(chuàng)建外鍵 Create table table1 (列名4 數(shù)據(jù)類型 是否為空 primary key, 列名3 數(shù)據(jù)類型 是否為空, 列名1 數(shù)據(jù)類型 references table2 (列名2) ) 注: Table1外鍵表 Table2主鍵表 列名1是主表列 列名2是外鍵表列 最一般常用的是主表的列和外鍵表的列的字段是一樣的 一般多為ID 可以作為主鍵的。這是兩個之間的交互。 四、Check約束 他也是基于一個表中的約束,限定表中列直接愛你數(shù)據(jù)的參照關(guān)系。
5、向一個以創(chuàng)建的表中添加約束 Alter tabel table1 Add constraint 約束名 check(列名對于列的限制條件) 多是一些可以找到范圍的數(shù)據(jù),例如年齡,身高,體重。 五、default 默認約束 他是一個對于某一個值的約束,他是唯一的一個用for關(guān)聯(lián)詞的句子 向表中添加一個默認約束 Alter tabletable1 Add default 默認值for 列名 六、刪除約束 刪除約束也是對于表的修改故: Alter table table1 Drop constraint 約束名 注:上面就是我所理解的一些約束。想要記住他們并不難 1 開頭的一般都是 alter ta
6、ble 表名 或是create table 表名 2 在已有的表中添加約束用 alter 3 與表同時創(chuàng)建用 create 4 他們所有的關(guān)鍵字: 主鍵 約束:primary key 唯一性約束:unique 外鍵 約束:froeign key.references(參照).兩個表之間的關(guān)系,該是互相參照 查詢 約束:. constraint(約束).check對字段查詢,對字段約束 默認 約束:.default.for(給). 將前面默認的值 給 后邊的字段ORACLE約束總結(jié)2012-05-13 08:36 by 瀟湘隱者, 682 visits, 收藏, 編輯你對OR
7、ACLE約束的了解如何?比較模糊還是相當透徹?如果你對下面幾個問題了如指掌的話,恭喜你,你已經(jīng)對約束掌握得比較好了,不用看這篇文章了。ORACLE的約束有啥功能作用? 有哪些類型約束(不同版本ORACLE是否不同)?視圖有約束嗎?約束是否會影響SQL性能? 約束信息存儲在哪些系統(tǒng)視圖、數(shù)據(jù)字典中?約束能否修改名稱?能否禁用約束?延遲約束有啥好處. 約束定義約束是強加在表上的規(guī)則或條件。確保數(shù)據(jù)庫滿足業(yè)務(wù)規(guī)則。保證數(shù)據(jù)的完整性。當對表進行DML或DDL操作時,如果此操作會造成表中的數(shù)據(jù)違反約束條件或規(guī)則的話,系統(tǒng)就會拒絕執(zhí)行這個操作。約束可以是列一級別的 也可以是表級別的。定義約束時沒
8、有給出約束的名字,ORACE系統(tǒng)將為該約束自動生成一個名字,其格式為SYS_Cn,其中n為自然數(shù)(強烈建議各位在創(chuàng)建表或增加約束時,給約束定義名稱。). 約束功能 約束的功能:實現(xiàn)一些業(yè)務(wù)規(guī)則,防止無效的垃圾數(shù)據(jù)進入數(shù)據(jù)庫,維護數(shù)據(jù)庫的完整性(完整性指正確性與一致性)。從而使數(shù)據(jù)庫的開發(fā)和維護都更加容易。 約束分類約束分為6類: 非空(NOT NULL)約束、 唯一(UNIQUE)約束、主鍵(PRIMARY KEY)約束、外鍵(FOREIGN KEY)約束、條件(CHECK)約束、REF約束。 非空(NOT NULL)約束:顧名思義,所約束的列不能為NU
9、LL值。否則就會報錯 唯一(UNIQUE)約束:在表中每一行中所定義的這列或這些列的值都不能相同。必須保證唯一性。否則就會違法約束條件。主鍵(PRIMARY KEY)約束:唯一的標識表中的每一行,不能重復(fù),不能為空。 創(chuàng)建主鍵或唯一約束后,ORACLE會自動創(chuàng)建一個與約束同名的索引(UNIQUENES為UNIQUE唯一索引)。需要注意的是:每個表只能有且有一個主鍵約束。外鍵(FOREIGN KEY)約束:用來維護從表(Child Table)和主表(Parent Table)之間的引用完整性. 外鍵約束是個有爭議性的約束,它一方面能夠維護數(shù)據(jù)庫的數(shù)據(jù)一致性,數(shù)據(jù)的完整性。防止錯誤的垃
10、圾數(shù)據(jù)入庫; 另外一方面它會增加表插入、更新等SQL性能的額外開銷,不少系統(tǒng)里面通過業(yè)務(wù)邏輯控制來取消外鍵約束。例如在數(shù)據(jù)倉庫中,就推薦禁用外鍵約束。條件(CHECK)約束:表中每行都要滿足該約束條件。條件約束既可以在表一級定義也可以在列一級定義。在一列上可以定義任意多個條件約束。REF約束的定義:REF column by definition references an object in another object type or in a relational table. A REF constraint lets you further describe the relation
11、ship between the REF column and the object it references. ORACLE 11 數(shù)據(jù)庫的約束類型如下: ORACLE 10 數(shù)據(jù)庫的約束類型如下:在oracle 官方文檔C(check constraint on a table)
12、P(primary key)U(unique key)R(referential integrity)V(with check option, on a view)O(with read only, on a view)CCheck constraint on a tablePPrimary keyUUnique keyRReferential integrityVWith check option, on a viewOWith read only, on a viewHHash expressionFConstraint that involves a REF columnSSupplem
13、ental logging對于H、S類型,尚不清楚情況,而且從上面我在11g數(shù)據(jù)庫實驗結(jié)果看,也沒發(fā)現(xiàn)這兩種類型。(有了解的朋友可以告知一二)約束命名規(guī)范約束名稱建議自己定義一套命名規(guī)則,否則使用系統(tǒng)生成的約束名,很難能把它和對應(yīng)的表、字段聯(lián)系起來。非空約束 NN_表名_列名 唯一約束 UK_表名_列名主鍵約束 PK_表名外鍵約束 FK_表名_列名條件約束 CK_表名_列名默認約束 DF_表名_列名如果約束名稱超過32位長度,建議應(yīng)該縮寫表名,而不應(yīng)用NN_表名_數(shù)字。不過具體視情況而定,很多時候 DF_表名_列名 這樣命名,往往超出了32字符。所以有時候需要縮寫表面或是采用其它規(guī)則
14、。 約束操作約束管理 創(chuàng)建各類約束先看一下如何創(chuàng)建主鍵約束CREATE TABLE "DM"."DEPT" ( "DEPTNO" NUMBER(2,0) PRIMARY KEY, "DNAME" VARCHAR2(14), "LOC" VARCHAR2(13) ) TABLESPACE "TBS_DM_DAT" ; COMMENT ON TABLE "DM"."DEPT" IS '部門表' COMME
15、NT ON COLUMN "DM"."DEPT"."DEPTNO" IS '部門編號' COMMENT ON COLUMN "DM"."DEPT"."DNAME" IS '部門名稱' COMMENT ON CLOUMN "DM"."DEPT"."LOC" IS '部門所在地方'此時它的約束名稱是系統(tǒng)創(chuàng)建的。如圖所示: 如果我們以下面的腳本創(chuàng)建,此時
16、約束如下所示 1 CREATE TABLE "DM"."DEPT" 2 ( 3 "DEPTNO" NUMBER(2,0), 4 "DNAME" VARCHAR2(14) , 5 "LOC" VARCHAR2(13) , 6 CONSTRAINT "PK_DEPT" PRIMARY KEY ("DEPTNO") USING INDEX TABLESPACE TBS_DM_IN 7 ) TABLESPACE "TBS_DM_DAT&quo
17、t; ; 8 9 10 11 12 COMMENT ON TABLE "DM"."DEPT" IS '部門表'13 14 COMMENT ON COLUMN "DM"."DEPT"."DEPTNO" IS '部門編號'15 16 COMMENT ON COLUMN "DM"."DEPT"."DNAME" IS '部門名稱'17 18 COMMENT ON CLOUMN "DM&q
18、uot;."DEPT"."LOC" IS '部門所在地方'19 如果一個表的約束類型比較多,你會看到一堆SYS_CN這樣的約束,如果不仔細核對后面的字段,很難一眼看出約束類型、約束對應(yīng)字段。主鍵約束的限制文檔原文如下: (翻譯在下) Restrictions on Primary Key Constraints Primary constraints are subject to the following restrictions:A table or vi
19、ew can have only one primary key.一個表或視圖有且只有一個主鍵None of the columns in the primary key can be LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.主鍵字段不能為LOB、LOG、LOG RAW、V
20、ARRAY、NESTED TABLE、BFILE、REF、TIMESTAMP WITH TIME ZONE或用戶定義類型。然而它可以包含TIMESTAMP WITH LOCAL TIME ZONE類型的字段。The size of the primary key cannot exceed approximately one database block.主鍵大小不能超過一個數(shù)據(jù)塊大小。A composite primary key cannot have more than 32 columns.主鍵組合鍵不能超過32列。You cannot designate the same colum
21、n or combination of columns as both a primary key and a unique key.你不能指定一列或組合列既是主鍵又是唯一鍵。You cannot specify a primary key when creating a subview in an inheritance hierarchy. The primary key can be specified only for the top-level (root) view.創(chuàng)建一個繼承層次結(jié)構(gòu)中的子視圖時,你不能指定一個主鍵。主鍵可以唯一指定的頂層(根)視圖。外鍵約束ALTER TABL
22、E childTableADD CONSTRAINT FK_xxxx_xxxFOREIGH KEY(columnName)REFERENCES parentTalbe(primaryKeyColumn) ON DELETE CASCADE|SET NULL; ON DELETE SET NULL子句:當主表中的一行數(shù)據(jù)被刪除時,Oracle系統(tǒng)會自動地將所有從表中依賴于它的數(shù)據(jù)記錄的外鍵改成空值;ON DELETE CASCADE:當主表中的一行數(shù)據(jù)被刪除時,Oracle系統(tǒng)會自動地將所有從表中依賴于它的數(shù)據(jù)記錄刪除;注:如果在外鍵定義中使用了ON DELETE SET NULL 或
23、ON DELETE CASCADE,無論刪除操作是在父表這一端還是子表這一端都不會產(chǎn)生違反引用完整性的問題,但是卻留下了安全隱患。這兩個子句要謹慎使用,只有在不得已時使用,謹記謹記!外鍵約束對DML與DDL的影響:INSERT:只有操作是在子表或從表這一端時才會產(chǎn)生違反引用完整性約束的問題,父表則不然。DELETE:只有操作是在父表或主表這一端時才會產(chǎn)生違反引用完整性約束的問題,子表則不然。UPDATE:子表父表直接操作都會違反引用完整性約束。兩種解決方法:1)先更新子表的引用列為空,再更新父表的主鍵的列的值,然后把子表的引用列更新成新的父表的值;2)使用ON DELETE SET NULL,
24、先更新父表,然后將子表外鍵為空的記錄更新為新的值。DDL語句:DROP TABLE與TRUNCATE TABLE,操作父表,違反引用完整性約束,子表則不然。外鍵約束的限制:Restrictions on Foreign Key Constraints Foreign key constraints are subject to the following restrictions:None of the columns in the foreign key can be of LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIME
25、STAMP WITH TIME ZONE, or user-defined type. However, the primary key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.外鍵字段不能為LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, BFILE, REF, TIMESTAMP WITH TIME ZONE, or user-defined type類型,主鍵可以包含數(shù)據(jù)類型為TIMESTAMP WITH LOCAL TIME ZONE的字段。The referenced uniqu
26、e or primary key constraint on the parent table or view must already be defined.引用唯一或主鍵約束,必須是父表中已經(jīng)定義的。A composite foreign key cannot have more than 32 columns.外鍵的組合列不能超過32列。The child and parent tables must be on the same database. To enable referential integrity constraints across nodes of a distrib
27、uted database, you must use database triggers. See CREATE TRIGGER.字表和父表必須在同一個數(shù)據(jù)庫。分布式數(shù)據(jù)庫中,外鍵不能跨節(jié)點,但觸發(fā)器可以If either the child or parent object is a view, then the constraint is subject to all restrictions on view constraints. See "View Constraints".You cannot define a foreign key constraint i
28、n a CREATE TABLE statement that contains an AS subquery clause. Instead, you must create the table without the constraint and then add it later with an ALTER TABLE statement.你不能在CREATE TABLE語句中包含AS子查詢子句定義一個外鍵約束。相反,你必須創(chuàng)建一個沒有約束的表,然后添加ALTER TABLE語句。加上一些類似其它約束的限制條件約束非空約束非空約束的限制:1: 你不能在視圖約束上指定字段為NULL或NOT
29、 NULL值2: 你不能指定一個對象的屬性為NULL或NOT NULL。相反,而應(yīng)使用的IS NOT NULL條件CHECK約束條件約束中的條件與查詢語句中的條件相同,但是不能包括以下內(nèi)容:1)CURRVAL,NETXTVAL,LEVEL和ROWNUM這樣的偽列(PSEUDOCOLUMNS);2)引用其它行中值的查詢語句;3)SYSDATE,USER,USERENV和UID的函數(shù)調(diào)用。文檔原文如下:Restrictions on NOT NULL Constraints NOT NULL constraints are subject to the following restric
30、tions:You cannot specify NULL or NOT NULL in a view constraint.You cannot specify NULL or NOT NULL for an attribute of an object. Instead, use a CHECK constraint with the IS NOT NULL condition.唯一約束唯一約束的限制:文檔原文如下:Restrictions on Unique Constraints Unique constraints are subject to the following restr
31、ictions:None of the columns in the unique key can be of LOB, LONG, LONG RAW, VARRAY, NESTED TABLE, OBJECT, REF, TIMESTAMP WITH TIME ZONE, or user-defined type. However, the unique key can contain a column of TIMESTAMP WITH LOCAL TIME ZONE.當字段類型為LOB、LOG、LONG RAW、 VARRAY、NESTED TABLE、OBJECT、REF、TIMEST
32、AMP、用戶定義類型時,不能在字段上定義唯一性約束。當數(shù)據(jù)類型為TIMESTAMP WITH LOCAL TIME ZONEA composite unique key cannot have more than 32 columns.組合字段定義的唯一索引,字段個數(shù)不能超過32個You cannot designate the same column or combination of columns as both a primary key and a unique key.你不能指定同一字段或組合字段即為主鍵又是唯一鍵You cannot specify a unique key wh
33、en creating a subview in an inheritance hierarchy. The unique key can be specified only for the top-level (root) view.約束管理刪除約束ALTER TABLE DM.EMPDROP CONSTRAINT SYS_C00115525;CASCADE子句用來刪除存在有完整性關(guān)系的約束。當然你也可以用如下語法ALTER TABLE DM.EMPDROP UNIQUE (COMM);添加約束 添加非空約束ALTER TABLE DM.EMPMODIFY(MGR CONSTRAI
34、NT CK_EMP_MGR NOT NULL);添加其他約束ALTER TABLE DM.EMPADD CONSTRAINT CK_EMP_SAL CHECK(SAL > 0 AND SAL <20000);重命名約束ALTER TABLE METAONE.T1RENAME CONSTRAINT SYS_C0059699 TO PK_T1約束維護禁用約束ALTER TABLE 表 DISABLE CONSTRAINT 約束名 CASCADE;ALTER TABLE DM.EMPDISABLE CONSTRAINT UK_EMP_COMM;ALTER TABLE TEST DISAB
35、LE PRIMARY KEY CASCADE;參數(shù)CASCADE子句用來關(guān)閉存在有完整性關(guān)系的約束,比如DISABLE一個主鍵,如果沒有CASCADE子句就會出錯,此時使用CASCADE子句DISABLE主鍵可以將該主鍵與相關(guān)外鍵一起DISABLE掉。使用的情況:例如在數(shù)據(jù)庫系統(tǒng)中大規(guī)模裝入數(shù)據(jù)時,為了系統(tǒng)的效率您不得不犧牲數(shù)據(jù)的一致性來關(guān)閉一些約束,甚至刪除一些約束將主表主鍵禁止的同時,也將禁止依賴于此主鍵的外鍵禁止了使用上面腳本禁用約束的時候會刪除索引,如果你想禁用約束的時候,保留索引,可以使用如下腳本(當然你再啟用約束的時候會重新重建索引,這對大表顯然開銷相當大) ALTER
36、TABLE DM.EMPDISABLE CONSTRAINT UK_EMP_COMM KEEP INDEX; 啟用約束如果關(guān)閉主鍵約束時使用了CASCADE,此時使用ENABLE不會將主鍵約束與外鍵約束同時打開,只能對主鍵約束與外鍵約束分別使用ENABLE CONSTRAINT 子句打開。推遲約束Deferring Constraint Checks當前事務(wù)的Constraint Checks全部推遲SET CONSTRAINTS ALL DEFERRED;SET CONSTRAINT XXX DEFERRED;當前會話的Constraint ChecksALTER SSSSION
37、SET CONSTRAINTS ALL deferred;ALTER SSSSION SET CONSTRAINT xxx deferred;約束信息 SELECT * FROM DBA_CONSTRAINTS;SELECT * FROM ALL_CONSTRAINTS;SELECT * FROM USER_CONSTRAINTS;SELECT * FROM DBA_CONS_COLUMNS;SELECT * FROM ALL_CONS_COLUMNS;SELECT * FROM USER_CONS_COLUMNS;約束有四種狀態(tài):ENABLE、VALID、INVALID、DISAB
38、LE約束的檢查機制 IMMEDIATE語句級:Oracle performs its constraint checking after the statement has been completely executed. DEFERRED(事務(wù)級):A constraint is deferred if the system checks that it is satisfied only on commit. If a deferred constraint is violated, then commit causes the transac
39、tion to rollback;(推遲到事務(wù)提交時才檢查約束,謹慎使用) 使用約束建議 關(guān)于約束的使用建議,網(wǎng)上有這么一些建議,我覺得挺有用的。大家可以參考一下 1、如果在Oracle提供的幾種約束和自定義的程序(觸發(fā)器、過程或函數(shù))兩者之間有選擇化,應(yīng)盡可能使用Oracle的約束; 2、應(yīng)該在創(chuàng)建表的時候就定義好所需的各種Oracle約束。如果沒有的話,應(yīng)盡可能早地加上所需要的Oracle約束,這樣會使系統(tǒng)更可靠,更容易維護;(這個視具體情況而言)
40、160; 3、Oracle系統(tǒng)進行過多的約束檢查會大大的降低Oracle數(shù)據(jù)庫系統(tǒng)的效率; oracle筆記 (21) 主鍵約束 (2012-01-05 21:43:48)轉(zhuǎn)載標簽: 主鍵約束 數(shù)據(jù)類型 數(shù)據(jù)修改 雜談分類: DataBase一、主鍵約束:1.創(chuàng)建主鍵的同時,定義主鍵約束:語法:create table 表名 (列名1 數(shù)據(jù)類型1 primary key,列名2 數(shù)據(jù)類型2,.);SQL> create table example (id number primary key, na
41、me varchar2(20); Table created SQL> create table example2 (id number,name varchar2(20) ,primary key (id,name); Table created SQL> desc example2;Name Type Nullable Default Comments - - - - - ID NUMBER
42、0; NAME VARCHAR2(20)
43、0; 2.創(chuàng)建表后,添加主鍵約束:語法:alter table 表名 add primary key (列名1,列名2,.);可以多列構(gòu)成主鍵。如:SQL> alter table example2 drop primary key; -刪除主鍵 Table altered SQL> alter table example2 add primary key (id,name); -添加主鍵 Table altered3.為主鍵命名:顯式命名主鍵:語
44、法:alter table 表名 add constraint 約束名稱 primary key (列名1,列名2 ,.);SQL> alter table example2 drop primary key; Table altered SQL> alter table example2 add constraint pk_example primary key (id);再看主鍵約束:SQL> select table_name,constraint_name,constraint_type,status 2 from
45、 user_constraints where table_name='EXAMPLE2' TABLE_NAME CONSTRAINT_NAME CONS
46、TRAINT_TYPE STATUS- - - -EXAMPLE2 PK_EXAMPLE P &
47、#160; ENABLED4.修改主鍵約束:4.1 禁用/啟用主鍵: alter table 表名 disable/enable primary key;注:禁用后可插入違法數(shù)據(jù),但有違法數(shù)據(jù)時無法啟用主鍵,將違法數(shù)據(jù)修改才可以。SQL> alter table example2 disable primary key; Table altered SQL> alter table example2
48、enable primary key; Table altered4.2 重命名主鍵:語法:alter table 表名 rename constraint 原主鍵名稱 to 新主鍵名稱4.3 主鍵與索引:當oarcle創(chuàng)建主鍵時,會自動創(chuàng)建一個與主鍵同名的索引。索引并不會隨著主鍵的刪除而刪除,也不會為重命名而改變。查看信息:SQL> select index_name,table_name,column_name 2 from user_ind_columns 3 where index_name='
49、PK_EXAMPLE' INDEX_NAME TABLE_NAME COLUMN_NAME- - -P
50、K_EXAMPLE EXAMPLE2 IDoracle筆記 -外鍵約束 (2
51、012-01-06 09:47:02)轉(zhuǎn)載標簽: 外鍵約束 級聯(lián)刪除 參照完整性 級聯(lián)更新 雜談分類: DataBase一、外鍵約束簡介:外鍵的主要作用是保證數(shù)據(jù)的參照完整性,主表中有數(shù)據(jù)時,才可以在從表上插入相應(yīng)的數(shù)據(jù)。外鍵支持的列,必須是主鍵列,以便獲得唯一記錄。1.1 創(chuàng)建外鍵約束:語法:alter table 表名 add constraint 約束名 foreign key (外鍵列名)references 主表 (主表主鍵列);如:先創(chuàng)建customer表:SQL> create table customer (
52、160; 2 customer_id number primary key, 3 customer_name varchar2(20), 4 customer_phone varchar2(20), 5 customer_address varchar2(50) 6 ); Table created再創(chuàng)建purchase_order表:SQL> create ta
53、ble purchase_order( 2 order_id number primary key, 3 product_name varchar2(20), 4 product_quantity number, 5 customer_id number 6 ); Table created添加外鍵:SQL&g
54、t; alter table purchase_order 2 add constraint fk_purchase_order 3 foreign key (customer_id) 4 references customer(customer_id); Table altered查看外鍵約束信息:SQL> select table_name ,constraint_name,constraint_type,r_constraint_nam
55、e 2 from user_constraints 3 where table_name='PURCHASE_ORDER' TABLE_NAME CONSTRAINT_NAME
56、160; CONSTRAINT_TYPE R_CONSTRAINT_NAME- - - -PURCHASE_ORDER SYS_C005501 &
57、#160; P PURCHASE_ORDER FK_PURCHASE_ORDER
58、160; R SYS_C005500二、級聯(lián)更新與級聯(lián)刪除:為了保護數(shù)據(jù)的參照完整性提供2種校驗類型即時校驗(immediate) 和 延遲校驗(deferred),默認為即時校驗。延遲校驗是當整個事務(wù)結(jié)束時(commit),才驗證數(shù)據(jù)的完整性。1.級聯(lián)更新:語法:alter table 表名 add constraint 外鍵名稱 foreign key (外鍵列) referen
59、ces 主表名(主表主鍵列)deferrable initially deferred; SQL> alter table purchase_order 2 drop constraint fk_purchase_order; -刪除外鍵SQL> alter table purchase_order 2 add constraint fk_purchase_order 3 foreign key (customer_id) 4
60、;references customer (customer_id) 5 deferrable initially deferred; Table altered2.級聯(lián)刪除:在創(chuàng)建外鍵時直接指定級聯(lián)刪除,不用在刪除時聲明要級聯(lián)刪除。alter table 表名 add constraint 外鍵名稱 foreign key(外鍵列)references 主表名(主表主鍵列)on delete cascade; SQL> alter table purchase_order 2 drop constr
61、aint fk_purchase_order 3 Table alteredSQL> alter table purchase_order 2 add constraint fk_purchase_order 3 foreign key (customer_id) 4 references customer(customer_id) 5 on delete cascade; Table altere
62、d三、外鍵約束的相關(guān)操作:1.重命名:SQL> alter table purchase_order rename constraint fk_purchase_order to fk_po;2.禁用/啟用外鍵:在數(shù)據(jù)庫遷移時用到,否則會降低執(zhí)行效率。SQL> alter table purchase_order disable constraint fk_po; Table altered SQL> alter table purchase_order enable constraint fk_po; Table altered3.刪除外鍵:S
63、QL> alter table purchase_order 2 drop constraint fk_po; oracle筆記-唯一性約束 (2012-01-06 10:45:30)轉(zhuǎn)載標簽: 唯一性 約束 雜談分類: DataBase一、創(chuàng)建唯一性約束:alter table 表名 add constraint 約束名稱 unique (列名1、列名2.)查表:SQL> desc customer;Name
64、160; Type Nullable Default Comments - - - - - CUSTOMER_ID NUMBER CUSTOMER_NAME VARCHAR2(20) Y &
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南民族大學(xué)《現(xiàn)代儀器分析及實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 吉林交通職業(yè)技術(shù)學(xué)院《媒介批評學(xué)B》2023-2024學(xué)年第二學(xué)期期末試卷
- 保定職業(yè)技術(shù)學(xué)院《數(shù)字信號處理實訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 唐山科技職業(yè)技術(shù)學(xué)院《晶體生長原理與技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 甘肅中醫(yī)藥大學(xué)《高分子材料成型模具》2023-2024學(xué)年第二學(xué)期期末試卷
- 大理大學(xué)《C語言》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶城市管理職業(yè)學(xué)院《衛(wèi)生法學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陽江職業(yè)技術(shù)學(xué)院《動物生產(chǎn)學(xué)牛羊》2023-2024學(xué)年第二學(xué)期期末試卷
- 西藏大學(xué)《建筑安全與技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 肇慶學(xué)院《機器學(xué)習(xí)算法》2023-2024學(xué)年第二學(xué)期期末試卷
- 伊犁將軍府課件
- 中醫(yī)護理不良事件
- 初中常見原子團及其化合價、化學(xué)式、化學(xué)方程式
- 《城市公園配套設(shè)施設(shè)計導(dǎo)則》
- 供應(yīng)鏈安全培訓(xùn)教材課件
- 2024年醫(yī)院考勤的管理制度
- 卡西歐手表5213(PRG-550)中文說明書
- 2024年度北京市安全員之B證(項目負責(zé)人)測試卷(含答案)
- 蘋果電腦macOS效率手冊
- 2024年新人教版七年級上冊數(shù)學(xué)教學(xué)課件 第四章 整式的加減 章末復(fù)習(xí)
- 卸車工合同協(xié)議書
評論
0/150
提交評論