參考:
成都創(chuàng)新互聯(lián)專注于任丘企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站開發(fā)。任丘網(wǎng)站建設(shè)公司,為任丘等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計,全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
一、
1.insert? into table as select from......
insert into table(field) values();
? ?主鍵沖突:在數(shù)據(jù)插入的時候,如果主鍵對應(yīng)的值已經(jīng)存在,則插入失敗,此為主鍵沖突。此刻可以進(jìn)行選擇性處理,忽略、更新或替換。
----------------------------------------------------------------------------------
? ? insert ignore into ......? ? ?此方法遇到主鍵沖突時,不更改原記錄,也不報錯。
2.?replace into table values();??
replace into table as select? from ......
數(shù)據(jù)不存在則insert,若存在則replace掉,而且在列不全的情況下,未指定value的列會被設(shè)為默認(rèn)值。
3. insert into table values()? on duplicate? key? update table set ..........
注意values括號里只簡寫一個id即可,最終生效的是update的內(nèi)容。
二、關(guān)鍵時刻,如何使主鍵失效
? alter table tablename disable primary key;
? alter table tablename enable primary key;
? alter? table tablename drop??primary key;
? 使外鍵失效或生效:
? ?alter table tablenamee disable constraint? foreign_key_name;
在oracle中,我們創(chuàng)建一個主鍵,則同時自動創(chuàng)建了一個同名的唯一索引;刪除主鍵,則主鍵約束和對應(yīng)的唯一索引都刪除了。這是我們經(jīng)常見到的現(xiàn)象。\x0d\x0a \x0d\x0a發(fā)出一個創(chuàng)建主鍵的sql,oracle其實(shí)執(zhí)行了兩步:創(chuàng)建主鍵約束、創(chuàng)建/關(guān)聯(lián) 唯一索引。步驟是這樣的:\x0d\x0a創(chuàng)建主鍵約束時,檢查該主鍵字段上是否已經(jīng)存在唯一索引。若不存在,則自動創(chuàng)建同名唯一索引;若存在,則直接創(chuàng)建主鍵約束,并將該約束和已經(jīng)存在的唯一索引對應(yīng)上。 \x0d\x0a刪除主鍵約束時,可以決定是否保留對應(yīng)的索引;刪除唯一索引時,若存在對應(yīng)的主鍵約束,則不能刪除。\x0d\x0a \x0d\x0a總之,存在主鍵約束,則肯定存在與之對應(yīng)的唯一索引,而存在唯一索引,不一定對應(yīng)著有主鍵約束。\x0d\x0a \x0d\x0a下面我們驗(yàn)證一下:\x0d\x0a \x0d\x0aSQL create table test_pri(a number(1), b number(1));\x0d\x0a \x0d\x0a表已創(chuàng)建。\x0d\x0a \x0d\x0a--1.創(chuàng)建主鍵,則自動創(chuàng)建同名唯一索引\x0d\x0a--1.1創(chuàng)建主鍵,主鍵約束和唯一索引同時創(chuàng)建\x0d\x0aSQL alter table test_pri add constraint pk_test_pri_a primary key(a);\x0d\x0a \x0d\x0a表已更改。\x0d\x0a\x0d\x0aSQL select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME\x0d\x0a 2 from user_constraints where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0aCONSTRAINT_NAME TABLE_NAME INDEX_NAME \x0d\x0a----------------- ------------ -------------\x0d\x0aPK_TEST_PRI_A TEST_PRI PK_TEST_PRI_A\x0d\x0a \x0d\x0aSQL select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS\x0d\x0a 2 from user_indexes where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0aINDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES\x0d\x0a---------------- ------------ ------------ ---------\x0d\x0aPK_TEST_PRI_A NORMAL TEST_PRI UNIQUE\x0d\x0a \x0d\x0a--1.2 刪除主鍵,主鍵約束和對應(yīng)的唯一索引都刪除了\x0d\x0aSQL alter table test_pri drop constraint pk_test_pri_a;\x0d\x0a \x0d\x0a表已更改。\x0d\x0a \x0d\x0aSQL select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME\x0d\x0a 2 from user_constraints where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0a未選定行\(zhòng)x0d\x0a \x0d\x0aSQL select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS\x0d\x0a 2 from user_indexes where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0a未選定行\(zhòng)x0d\x0a \x0d\x0a--1.3其實(shí)刪除主鍵時可以選擇保留索引的\x0d\x0aSQL alter table test_pri add constraint pk_test_pri_a primary key(a);\x0d\x0a \x0d\x0a表已更改。\x0d\x0a \x0d\x0aSQL alter table test_pri drop constraint pk_test_pri_a keep index;\x0d\x0a \x0d\x0a表已更改。\x0d\x0a \x0d\x0aSQL select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME\x0d\x0a 2 from user_constraints where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0a未選定行\(zhòng)x0d\x0a \x0d\x0aSQL select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS\x0d\x0a 2 from user_indexes where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0aINDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES\x0d\x0a--------------- ----------- ----------- ---------\x0d\x0aPK_TEST_PRI_A NORMAL TEST_PRI UNIQUE\x0d\x0a\x0d\x0a--2.在存在唯一索引的列上創(chuàng)建主鍵,則只創(chuàng)建主鍵約束,同時將該約束與已有唯一索引關(guān)聯(lián)上(名稱可以不一致)\x0d\x0aSQL drop index pk_test_pri_a;\x0d\x0a \x0d\x0a索引已丟棄。\x0d\x0a \x0d\x0a--2.1 先創(chuàng)建唯一索引,再創(chuàng)建主鍵,名稱可以不一致\x0d\x0aSQL create unique index pk_test_pri_a on test_pri(a);\x0d\x0a \x0d\x0a索引已創(chuàng)建。\x0d\x0a \x0d\x0aSQL alter table test_pri add constraint pk_test_pri primary key(a);\x0d\x0a \x0d\x0a表已更改。\x0d\x0a \x0d\x0aSQL select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS\x0d\x0a 2 from user_indexes where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0aINDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES\x0d\x0a--------------- ----------- ------------ ---------\x0d\x0aPK_TEST_PRI_A NORMAL TEST_PRI UNIQUE\x0d\x0a \x0d\x0aSQL select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME\x0d\x0a 2 from user_constraints where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0aCONSTRAINT_NAME TABLE_NAME INDEX_NAME\x0d\x0a------------------ ------------ -------------\x0d\x0aPK_TEST_PRI TEST_PRI PK_TEST_PRI_A\x0d\x0a \x0d\x0a--2.2 不可刪除存在主鍵約束的唯一索引\x0d\x0aSQL drop index PK_TEST_PRI_A;\x0d\x0adrop index PK_TEST_PRI_A\x0d\x0a *\x0d\x0aERROR 位于第 1 行:\x0d\x0aORA-02429: 無法刪除用于強(qiáng)制唯一/主鍵的索引\x0d\x0a \x0d\x0a--2.3雖然兩者名稱不一致,但也是關(guān)聯(lián)在一塊的:刪除約束,則對應(yīng)的索引同時刪除\x0d\x0aSQL alter table test_pri drop constraint pk_test_pri; \x0d\x0a \x0d\x0a表已更改。\x0d\x0a \x0d\x0aSQL select INDEX_NAME, INDEX_TYPE, TABLE_NAME, UNIQUENESS\x0d\x0a 2 from user_indexes where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0a未選定行\(zhòng)x0d\x0a \x0d\x0aSQL select CONSTRAINT_NAME, TABLE_NAME, INDEX_NAME\x0d\x0a 2 from user_constraints where table_name = 'TEST_PRI';\x0d\x0a \x0d\x0a未選定行\(zhòng)x0d\x0a \x0d\x0aSQL
主鍵的意思是一個列或多列的組合,其值能唯一地標(biāo)識表中的每一行,可強(qiáng)制表的實(shí)體完整性。主鍵主要是用與其他表的外鍵關(guān)聯(lián),以及本記錄的修改與刪除。
外鍵的意思是表示了兩個關(guān)系之間的相關(guān)聯(lián)系。作用是以另一個關(guān)系的外鍵作主關(guān)鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。
擴(kuò)展資料
在有些數(shù)據(jù)庫中,雖然主鍵不是必需的,但最好為每個表都設(shè)置一個主鍵,不管是單主鍵還是復(fù)合主鍵。存在代表著表結(jié)構(gòu)的完整性,表的記錄必須得有唯一區(qū)分的字段,主鍵主要是用于其他表的外鍵關(guān)聯(lián),以及本記錄的修改與刪除。
主鍵基本不具有“意義更改”的可能性。但是,也有一些例外的情況,例如“訂單表”需要支持需求“訂單可以作廢,并重新生成訂單,而且訂單號要保持原訂單號一致”,那將“訂單編號”作為主鍵就滿足不了要求了。
參考資料來源:百度百科-數(shù)據(jù)庫主鍵
主鍵就是自己設(shè)定的字段,該字段不能為空,而且該字段的值必須唯一,外鍵就是在主表中可以重復(fù)出現(xiàn),但是它是另一個表的主鍵,對過外鍵使兩個表相關(guān).
主鍵:就是這個表的目錄,以方便你查詢、更新等等,既然是“目錄”,所以不可能有重復(fù)的定義出現(xiàn),所以也就自動有一個主鍵約束。
外鍵:就是這個表外在的約束,要求某一列值,必須與外面的某一數(shù)據(jù)相符 ,是表與表之間數(shù)據(jù)的約束 。
主鍵約束 :就是要求,主鍵不能重復(fù),才可以生成“目錄”。
唯一約束 :就是要求,某個或某幾個數(shù)據(jù)不能重復(fù)。
本文名稱:oracle主鍵怎么回事,oracle 邏輯主鍵和物理主鍵
鏈接地址:http://vcdvsql.cn/article10/hspodo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、小程序開發(fā)、品牌網(wǎng)站制作、、網(wǎng)站排名、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)