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