創(chuàng)建數(shù)據(jù)庫關(guān)系圖時(shí)出現(xiàn)沖突 merge into插入數(shù)據(jù)出現(xiàn)主鍵沖突?
merge into插入數(shù)據(jù)出現(xiàn)主鍵沖突?后臺(tái)開發(fā)一個(gè)存儲(chǔ)過程使用merge into,主要是根據(jù)主鍵值檢查目標(biāo)表中是否有主鍵值,如果有更新,否則插入。但是ORA-00001主鍵的在測(cè)試過程中經(jīng)常發(fā)生
merge into插入數(shù)據(jù)出現(xiàn)主鍵沖突?
后臺(tái)開發(fā)一個(gè)存儲(chǔ)過程使用merge into,主要是根據(jù)主鍵值檢查目標(biāo)表中是否有主鍵值,如果有更新,否則插入。但是ORA-00001主鍵的在測(cè)試過程中經(jīng)常發(fā)生。
前端開發(fā)人員口口聲聲說傳入的數(shù)據(jù)不會(huì)有重復(fù)值,懷疑數(shù)據(jù)庫的問題。我相信甲骨文不會(huì)有這樣的bug。
為什么唐 我在后臺(tái)演示這個(gè)錯(cuò)誤的方法。
1.創(chuàng)建一個(gè)測(cè)試表
創(chuàng)建表T_TEST
(
一種充電器(1),
b號(hào)
)
2.創(chuàng)建測(cè)試存儲(chǔ)過程
創(chuàng)建或替換程序測(cè)試(i_num in number)是
開始
并入t_test t
使用(SELECT #391#39 a,ROWNUM b FROM DUAL CONNECT BY ROWNUM lt I _ num)TA
開(t . a . ta . a)
當(dāng)匹配時(shí)
更新集合表表表表表表
當(dāng)不匹配時(shí)
插入值(TA.a,TA.b)
犯罪
結(jié)束測(cè)試
3.執(zhí)行存儲(chǔ)過程測(cè)試
SQLgt執(zhí)行測(cè)試(12)
PL/SQL過程已成功完成
SQLgt select * from t_test
一個(gè)B
- -
1 12
1 11
1 10
1 9
1 8
1 7
1 6
1 5
1 4
1 3
1 2
1 1
選擇了12行
SQLgt
4.清除t_test。
SQLgt截?cái)啾韙_test
表格被截?cái)?/p>
SQLgt
5.添加主鍵
SQLgt ALTER TABLE T_TEST使用索引添加約束PK_T_TEST主鍵(A)
表格已更改
6.在t_test中增加一行數(shù)據(jù)。
SQLgt執(zhí)行測(cè)試(1)
PL/SQL過程已成功完成
SQLgt select * from t_t:無法在源表中獲得一組穩(wěn)定的行。
ORA-06512:排在第34位。測(cè)試#34,第3行。
ORA-06512:在一號(hào)線。
SQLgt
8.清除t_t:違反了唯一約束(_T_T:排在第34位。測(cè)試#34,第3行。
ORA-06512:在一號(hào)線。
SQLgt
可以證明還是傳入數(shù)據(jù)的重復(fù)值造成的。
具體來說,就是要在節(jié)目中繼續(xù)跟蹤,讓他們信服。
數(shù)據(jù)庫沖突處理的原則?
處理矛盾的、遷就、回避、合作、妥協(xié)、脅迫等。當(dāng)你遇到時(shí),仔細(xì)思考,選擇合適的來處理。