一. 業務場景
業務流程需要進行寫入和更新的比較,所以有原表和歷史表。
要求表中的id唯一性,以及兩張表的id關聯,另外後續可能資料庫會進行遷移
二.方案選擇
方案一:id設定為int型自增長。
這種做法程式設計簡單,無需考慮id唯一性,由資料庫幫忙維護。但是在此業務場景下存在缺點
1. 這裡存在兩張表關聯。id自增長無法確保資料唯一性,也就無法保證原表與歷史表進行資料對映。比如說,現在需要向原表a和歷史表a_history表中插入相同的一條資料。插入a表後,發現無法取到a表的id(a表的id是主鍵,根據其他條件無法確保資料的唯一性)也就無法保證a_history表與a錶能到插入相同的一條資料
2. 因為後期需要進行資料庫的遷移,而id自增長的。在資料遷移過程中可能會發生錯誤
方案二:利用虛擬表dual表
dual表是系統表,有sys使用者建立,預設在system表空間下,與使用者表空間分開的。通過在dual表中建立序列既可以進行表id的唯一性控制。
三.實現
1. 視覺化操作
在oracle工具sql developer中。在system表空間schema目錄。建立序列update_sequence,設定遞進步長,最小值、最大值等。
2.sql 語句
兩種方法都可以建立序列,向表中插入資料時就可以使用create sequence update_sequence
increment by
1 maxvalue 5000 cycle;
select update_sequence.nextval from dual
作為原表和歷史表的id。這樣既保證了id的唯一性,也確保了原表與歷史表的資料能夠對映起來
資料庫 Oracle中建立資料庫
create database lihua 網上的說法是 oracle中的例項只對應乙個資料庫,出現此種情況說明oracle資料庫處於mount 裝載 或open狀態,需要使用startup nomount語句進行狀態更改,或者是直接使用dbca的圖形介面來建立 注 經測試,startup nomo...
資料庫文章集合
configuring dtc to work through a firewall ms support 文 sql 儲存過程分頁 2004 文 ado.中資料庫連線方式 微軟提供 微軟 文 yukon and the clr srinivas sampath 文 sql server 與acce...
oracle資料庫中sql notfound的用法
sql notfound 是乙個布林值。與最近的sql語句 update,insert,delete,select 發生互動,當最近的一條sql語句沒有涉及任何行的時候,則返回true。否則返回false。這樣的語句在實際應用中,是非常有用的。例如要update一行資料時,如果沒有找到,就可以作相應...