【正文】
在創(chuàng)建主鍵列后邊:create table test_emp3(id number(2) primary key,deptno number(2))。在所有列后邊創(chuàng)建主鍵:createtable test_emp4(id number(2),deptno number(2),constraint test_emp4_pk primary key(id))。也可以不指定名字create table test_emp7(id number(2),deptno number(2), primary key(id))。***********************************************************************************************直接跟在創(chuàng)建外鍵的列后邊(也有兩種可以指定名字,也可以不指定名字):create table test_emp5(id number(2),deptno number(2) references dept(deptno))。create table test_emp1(id number(10),deptno number(2) constraint test_emp_fk1 references dept(deptno))。跟在所有列的后邊創(chuàng)建外鍵:create table test_emp2(id number(2),deptno number(2),constraint test_emp2_fk foreign key(deptno) references dept(deptno))??偨Y:在創(chuàng)建表之后增加約束必須要指定名字;在創(chuàng)建表過程中創(chuàng)建約束可以也可以不指定名字,要指定名字的話要加上constraint關鍵字,要在所有列的最后指定約束須指定具體的列。(轉)oracle創(chuàng)建主鍵約束時創(chuàng)建唯一索引的好處20110808 18:221. 在創(chuàng)建主鍵約束時,如果在主鍵列上沒有索引,則會自動創(chuàng)建一個唯一索引:SQL alter table test add constraint p_test primary key (empno)。Table altered.SQL select table_name,index_name,uniqueness,status from user_Indexes where table_name=39。TEST39。TABLE_NAME INDEX_NAME UNIQUENES STATUS TEST P_TEST UNIQUE VALID在這種情況下,如果把主鍵約束disable后,則相應的索引被刪除:SQL alter session set events 39。10046 trace name context forever,level 1239。Session altered.SQL alter table disable constraint p_test。Table altered.SQL select table_name,index_name,uniqueness,status from dba_indexes where wner=39。SCOTT39。 and table_name=39。TEST39。no rows selectedSQL alter table enable constraint p_test。Table altered.SQL select table_name,index_name,uniqueness,status from dba_indexes where wner=39。SCOTT39。 and table_name=39。TEST39。TABLE_NAME INDEX_NAME UNIQUENES STATUS TEST P_TEST UNIQUE VALID此時查看10046的trace文件,會發(fā)現(xiàn)如下sql:........=====================PARSING IN CURSOR 3 len=27 dep=1 uid=0 ct=10 lid=0 tim=1206281434026658 hv=0 ad=39。b70eb7c839。drop index SCOTT.P_TESTEND OF STMTPARSE 3:c=18997,e=18639,p=0,cr=77,cu=0,mis=1,r=0,dep=1,og=4,tim=1206281434026652BINDS 3:=====================........=====================PARSING IN CURSOR 3 len=74 dep=1 uid=0 ct=9 lid=0 tim=1206281468333327 hv=1800847174 ad=39。326c9c0c39。CREATE UNIQUE INDEX SCOTT.P_TEST on SCOTT.TEST(EMPNO) NOPARALLELEND OF STMTPARSE 3:c=1000,e=822,p=0,cr=1,cu=0,mis=1,r=0,dep=1,og=4,tim=1206281468333320BINDS 3:=====================很顯然,在執(zhí)行disable之后,隨之執(zhí)行了drop index的動作,而enable 之后,隨之執(zhí)行了create unique index的動作。,在主鍵列上先創(chuàng)建一個索引,則在disable和enable過程中避免drop index 和create unique index的出現(xiàn):SQL alter table drop constraints p_test。Table altered.SQL drop index idx_test。Index dropped.SQL select owner,table_name,index_name,uniqueness,status from dba_indexes where table_name=39。TEST39。no rows selectedSQL create index on (empno)。Index created.SQL alter table add constraint p_test primary key (empno) using index。Table altered.SQL select owner,table_name,index_name,uniqueness,status from dba_indexes 2 where table_name=39。TEST39。 and wner=39。SCOTT39。OWNER TABLE_NAME INDEX_NAME UNIQUENES STATUS SCOTT TEST IDX_TEST NONUNIQUE VALIDSQL alter table disable constraint p_test。Table altered.SQL select owner,table_name,index_name,uniqueness,status from dba_indexes 2 where table_name=39。TEST39。 and wner=39。SCOTT39。OWNER TABLE_NAME INDEX_NAME UNIQUENES STATUS SCOTT TEST IDX_TEST NONUNIQUE VALIDSQL alter table enable constraint p_test。Table altered.SQL select owner,table_name,index_name,uniqueness,status from dba_indexes 2 where table_name=39。TEST39。 and wner=39。SCOTT39。OWNER TABLE_NAME INDEX_NAME UNIQUENES STATUS SCOTT TEST IDX_TEST NONUNIQUE VALID通過現(xiàn)在主鍵列上創(chuàng)建索引,再創(chuàng)建主鍵約束的方法,可以避免對大表主鍵進行disable和enable過程中產(chǎn)生的額外創(chuàng)建索引的工作。 主鍵 外鍵 序列 約束20080923版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明:關系中的一個屬性組,其值能唯一標識一個元組,若從該屬性組中去掉任何一個屬性,它就不具有這一性質了,這樣的屬性組稱作候選碼:當有多個候選碼時,可以選定一個作為主碼,選定的候選碼稱主鍵,主鍵是表中記錄的唯一標識:關系R中的一個屬性組,它不是R的候選碼,但它與另一個關系S的候選碼相對應,則稱這個屬性組為R的外碼或外鍵,它是依賴于別的表的數(shù)據(jù)舉個例子:student(s,sname,d),即學生這個關系有三個屬性:學號,姓名,所在系別dep(d,dname),即院系有兩個屬性:系號/系名則s#、d#是主鍵,也是各自所在關系的唯一候選鍵,d#是student的外鍵主鍵是定義一個表中起主要作用的數(shù)據(jù)項,這些數(shù)據(jù)項的數(shù)據(jù)在表中是唯一的,同時系統(tǒng)按主鍵為表建立索引外鍵是定義一個表中的某數(shù)據(jù)項的數(shù)據(jù),不允許在這個表的外鍵數(shù)據(jù)項中出現(xiàn)(或字段組合),一張表可以有多個唯一鍵,正如可以識別你的身份的可以是身份證,學生證,軍人證主鍵:你把唯一鍵的一個選做主鍵,一張表只能有一個主鍵外鍵:所定義的外鍵是另一張表的主鍵主鍵:表中記錄的唯一標識,外鍵:依賴于別的表的數(shù)據(jù),唯一鍵:在表中唯一主鍵和唯一鍵的一個區(qū)別:主鍵是不允許為NULL的,唯一鍵則可以,當然你可以加上NOT NULL來限制它主鍵:能夠唯一表示數(shù)據(jù)表中的每個記錄的字段或者字段的組合就稱為主鍵。一個主鍵是唯一識別一個表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的數(shù)據(jù)進行關聯(lián),在這一點上,主鍵是不同表中各記錄間的簡單指針,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用于指定一個或多個列的組合值具有唯一性,以防止在列中輸入重復的值,所以,主鍵的值對用戶而言是沒有什么意義,并且和它賦予的值也沒有什么特別聯(lián)系外鍵:若有兩個表A,B,C是A的主鍵,而B中也有C字段,則C就是表B的外鍵,B為信息表 在數(shù)據(jù)庫中,常常不只是一個表,這些表之間也不是相互獨立的,不同的表之間需要建立一種關系,才能將它們的數(shù)據(jù)相互溝通,而在這個溝通過程中,就需要表中有一個字段作為標志,不同的記錄對應的字段取值不能相同,也不能是空白的,通過這個字段中不同的值可以區(qū)別各條記錄,就像我們區(qū)別不同