oracle,insert語句中呼叫序列的2次nextval,序列增長的問題

時間 2021-05-04 01:09:21

1樓:

insert是插入一條記錄,從無到有

update 是更新已經有的記錄

如果你資料庫有記錄 1,2,3

前提主鍵沒有唯一約束,如果你更新where 主鍵=3的,則不會出現第2條,如果你insert 3,那麼自然會重複。

nextval是oracle自帶的序列,這個和你什麼時候插入記錄毫無關係,只要呼叫了一次nextval,則oracle內部就會把對應這個名字的序列自增1,不管你有沒有插入記錄到表裡,比如nextval是3,這時候沒插入表,又取了一次,那麼下次就是4了。nextval會直接返回一個自增的不重複的編號

你說的重複,要麼是表裡已經有了2,3,4記錄,但序列從1開始,那麼自然也會1,2,3,4這樣取,因為序列和你的業務表毫無關係;要麼是你**有問題,比如你insert into table values (art_id.nextval,art_id.nextval);丟到了迴圈裡,執行了n次,如果表沒主鍵約束,自然就重複記錄了。

你可以排查下主鍵相同的2個記錄,其他欄位是否也相同,建議把**裡所有的insert語句都列印出來,這樣在控制檯裡一目瞭然,哪些是該執行的,哪些是多餘的,好定位問題。

2樓:

按我的理解。應該是你放在一條sql語句當中時候。只增長1次。

比如你寫2個insert語句。結果應該不同。

3樓:雲湖醉客

nextval 用到就增加的,不會像你說的不增加,我沒有遇到過

sql語句中,SQL語句中USE

三歲喝酒 use pubs 選擇 名字 pubs 的資料庫 select title id from sales where title id in 查詢欄位title id符合號內限定條件的表sales的 title id 列 select title id from titles where t...

sql語句中as的意思是什麼,SQL語句中AS是什麼意思?

冼染周冬 as一般用在兩個地方,一個是query的時候,用來重新指定返回的column 名字如 一個table 有個column叫 id,我們的query是 select idfrom table1.但是如果你不想叫id了,就可以重新命名,如叫systemid 就可以這樣寫 select idas ...

sql語句中的符號是什麼意思,sql 語句中 符號是什麼意思?

以下希望對你有所幫助。儘管宣告字串常量的標準方法通常都很方便,但是如果字串包含很多單引號或者反斜槓,那麼理解字串的內容可能就會變得很苦澀,因為每個單引號都要加倍。為了讓這種場合下的查詢更具可讀性,postgresql 允許另外一種稱作 美元符包圍 的字串常量宣告辦法。一個通過美元符包圍宣告的字串常量...