個人對ORACLE中鍵保留表的理解

2021-08-29 09:05:43 字數 1115 閱讀 9068

相關資料鍵保留表給的定義很模糊,經過無數次驗證,我對鍵保留表的理解是:乙個複雜檢視,指由多張基表組成的檢視,若需要出現鍵保留表的話則必須保證基表中至少有一張表是有主鍵的!(可利用emp表和dept表生成新的無約束表建立檢視測試,無鍵保留表)

其次,這兩張表在進行關聯時(可以是表連線也可以是多表查詢,但一定要有關聯條件!其關聯條件其實相當於兩表的主外來鍵關係),如果關聯條件是使用了主鍵的話,則外來鍵表為鍵保留表。

還是拿t2,t3這2張表來舉例

t2表內容如下:

sid uname

-------- ---------

100 fw

2 sd

3 accplz

4 jr

5 bigjr

6 "feng"

7 fengwen

t3表的內容如下:

sid t3_uname

----- -----------

1 fw

2 sb

3 accplz

4 jr

5 bigjr

6 asda

7 fhj

那麼建立連線檢視:create or replace view t2_t3_view as select m1.sid,uname,t3_uname from t2 m1,t3 m2

where m1.sid = m2.sid;

這時候,通過update t2_t3_view 修改表t2裡的uname,或者是表t3裡的t3_uname都是不行的,因為現在這2張表都是非鍵值保留表。那麼,如果alter table t2 add constraint pk_sid primary key(sid)也就是將t2表裡的sid設為主鍵的話,那麼通過update t2_t3_view 可以修改t3_uname的值,而不能修改uname或sid的值。因為這時t3是外來鍵表,也就是鍵保留表,而t2不是。那麼,反過來,將t2的sid上的約束去掉,將t3的sid設為主鍵,那麼可以通過update t2_t3_view 修改uname或sid的值,但不能修改t3_uname的值。也就是這時t2變成鍵保留表了,而t3不是。

最後,如果t2,t3裡的sid列都既是外來鍵又是主鍵的話,那麼t2,t3都會變成鍵保留表。

對 MySQL 表分割槽與 MERGE分表的個人理解

最近資料庫表資料接近3000萬,查詢效能有點慢 對於mysql資料庫我已經做的 那為什麼還慢呢?排查發現,雖然分了區,但是有乙個常用的查詢語句,預設並沒有帶時間戳這個字段,分割槽是按時間戳來劃分的,你又不帶時間戳這個字段,那不就得全分割槽檢索了嗎?所以慢啊,分割槽並沒有被有效利用。就好像網上看到的一...

oracle對已有表建立分割槽

oracle根據已有表及資料建立表分割槽並匯入資料 假設情景 現有system.test表,資料量過千萬,處於ts test表空間中。表中有列a,將a 6與a小於6的資料進行分割槽 www.2cto.com 確保不會有外部程式修改需要建表分割槽的表 1.對需要重建表分割槽的表進行備份,匯出dmp,防...

利用oracle的動態PL SQL對簡單表示式求值

create or replace function power.getrl v charrl in varchar2,v noerror in char return float isv rl float v cursorid integer v selectstmt varchar2 2000 ...