Oracle 不使用序列來實現增量,總是違反唯一性約束,為什麼?

發布 科技 2024-07-27
17個回答
  1. 匿名使用者2024-01-31

    如果你寫的語句有問題,給你乙個語句的表象,按照這個寫就沒有問題了。

    例如,update seqtab set id = id + 1 where tablename = ??returning id into v_curvalue;

    其中,seqtab 是主鍵維護表,id 是表中 id 值最大的字段,tablename 是你說的表名字段,v curvalue 是定義的變數,所以這條語句建議你寫在儲存過程中(以 v curvalue 作為輸出引數)或者寫乙個函式, 和 v curvalue 可以用作函式的返回值。如果同時獲取更新值的值,則不會出現索引衝突。

    我懷疑你是先更新再選擇再選擇再更新的形式實現的,如果頻繁取值,可能會因為併發而造成重複取當前ID的現象,這就是你說的違反唯一性約束的原因。

  2. 匿名使用者2024-01-30

    如果每次都發生這種情況(即只有乙個使用者使用它時),請檢查程式的邏輯。

    如果發生在併發的情況下,請使用 for update 鎖定 fetch 以防止重複獲取。

  3. 匿名使用者2024-01-29

    是的,Oracle 沒有這種通用功能,實現增量的唯一方法是構建觸發器。

  4. 匿名使用者2024-01-28

    您的字段要求字段值是唯一的,並且您始終插入重複值,因此丟擲違反了唯一性約束。

    只要您可以確保字段值是唯一的,您就可以不使用預言機序列。

  5. 匿名使用者2024-01-27

    你是怎麼寫的?

    另外,我不會用完序列......

  6. 匿名使用者2024-01-26

    怎麼會這樣?

    select id from t2 where tablename='t1' for update;

    取出新值 aid=id+1

    update t2 set id = id + 1 where tablename = 't1';

    insert into t1(f1) values(aid);

    commit;

  7. 匿名使用者2024-01-25

    您是否每次都先找出最大的 ID,然後在每次插入時新增 1? 這是非常糟糕的,如果多人同時操作,會出現問題,建議使用oracle的序列來解決。

  8. 匿名使用者2024-01-24

    你說的那個操作應該是第乙個操作,對吧,我懷疑你的表ln b debttrade有測試資料沒有被刪除,或者有一段資料(可能沒有被你存入)。 那麼如果測試資料的 debttradeid 中有乙個值,該值與序列的某個值相同,就會出現違反唯一約束的問題。 說白了,序列沒有錯,問題是表裡已經有值了,導致了問題。

    那為什麼後來沒有出現呢?

    因為你可能只有乙個值,過了這個值之後,序列繼續增加,不再有相同的值,那麼就不會有違反唯一約束的問題。

  9. 匿名使用者2024-01-23

    查詢 DUM 維度序列最大值的下乙個值,並將找到的值新增到相應序列的起始值中。

    預言機中唯一的約束可以是。

    版本為空,null值可以重複,不空只能使用一次,可以測試一下。

    主鍵約束是唯一的約束,不能為空。 兩者之間的主要區別在於主鍵約束不能為 null,而 unique 可以為 null,null 可以重複。

    根據錯誤訊息,這是因為插入了相同的值。 這違反了約束。

  10. 匿名使用者2024-01-22

    插入資料時,唯一近似束的字段不能重複,bai 可以為 null,但空只能為空。

    志出現過一次。 例如,如果在插入資料時有兩個或多個學生 ID 具有相同的學生 ID,則會出現您提到的問題。 資料庫表的主鍵具有唯一的約束,因此主鍵不能重複。

  11. 匿名使用者2024-01-21

    select from dual;

    查詢 DUM 維度序列的最大值的下乙個值。

    將找到的值新增到相應序列的起始值...

  12. 匿名使用者2024-01-20

    這是怎麼? 專業吧?

  13. 匿名使用者2024-01-19

    如果是**,可以先寫乙個判斷語句,避免插入相同的資料。

  14. 匿名使用者2024-01-18

    如果在匯入過程中閱讀了 Oracle 報告的錯誤訊息,則可以找出哪個表的哪個約束導致了此問題。

  15. 匿名使用者2024-01-17

    DMP 檔案之所以是 DMP 文件,是因為該文件已經匯入過一次,資料庫中已經有與 DMP 文件相同的內容,並且資料中必須存在唯一的繫結限制。

    如果要多次匯入 DMP 檔案,最好在命令提示符 (DOS) 中執行此操作,然後選擇“否”,並選擇“物件已存在,忽略建立錯誤”。 如果選擇“是”,則匯入的資料記錄將被複製,並且可能會違反唯一的繫結錯誤。

  16. 匿名使用者2024-01-16

    存在重複資料,因此報告錯誤。 檢查您自己的程式,最好發布完整的過程。

  17. 匿名使用者2024-01-15

    這個問題也需要問,分別執行刪除和插入兩句話,看看刪除是否乾淨,看看插入中是否有重複資料。。。

相關回答
17個回答2024-07-27

- 建議使用這種寫法,當資料量大,需要模糊,需要寬群時,使用 instr 函式的效率遠高於同類。 >>>More

16個回答2024-07-27

輸入 cmd 並輸入以下命令:

exp 輸入。 >>>More

11個回答2024-07-27

您好,lzq:幫助,啟動遊戲時提示“Steam無法將CSGO與Steam雲同步” 答:這個問題很常見! >>>More

11個回答2024-07-27

電腦卡的主要原因有:C盤中儲存的檔案和啟動項太多,記憶體故障不足,病毒、垃圾檔案太多等,這些原因可能會導致電擊車的速度變慢,使用360進行清理和優化,同時整理磁碟碎片。

3個回答2024-07-27

如果僅使用視訊,則無法實現準確的量化。 而“鷹眼”技術已經將其數位化。 讓比賽的結果更加沒有爭議。 >>>More