文章標題 Oracle資料庫中dual表使用,oracledual

來源:互聯網
上載者:User

文章標題 Oracle資料庫中dual表使用,oracledual

一. 業務情境
商務程序需要進行寫入和更新的比較,所以有原表和曆史表。
要求表中的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的唯一性,也確保了原表與曆史表的資料能夠映射起來

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.