1. <var id="fe6gj"></var>

    <rp id="fe6gj"><nav id="fe6gj"></nav></rp>

    <noframes id="fe6gj"><cite id="fe6gj"></cite>

    <ins id="fe6gj"><button id="fe6gj"><p id="fe6gj"></p></button></ins>
    1. <tt id="fe6gj"><i id="fe6gj"><sub id="fe6gj"></sub></i></tt>
        始創于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業
        • 60秒人工響應
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補償
        您的位置: 網站首頁 > 幫助中心>文章內容

        Oracle中主鍵約束跟唯一索引之間的關聯關系

        發布時間:  2012/8/30 16:49:04

        在Oracle中,可以在創建主鍵約束的時候自動創建唯一索引,也可以先創建唯一索引,然后再基于這個唯一索引來創建主鍵約束。后一種方式有一個好處,在 需要對數據量比較大而且讀寫頻繁的OLTP表創建主鍵約束的時候,可以先ONLINE的創建一個唯一的索引,然后再創建主鍵約束,這樣可以減少對表的讀寫 阻塞。但這樣就帶來一個問題,第一種方式創建的索引在刪除約束的時候索引會被自動刪除,而第二種方式創建的索引在刪除約束的時候不會自動刪除,需要刪完約 束刪索引,如果忘記了這個唯一索引的話,可能會帶來跟想象不一樣的結果。同時,Oracle針對這種情況提供了特殊的刪除約束的方法,可以同時刪除約束和 索引,就是:alter table bear drop constraint pk_bear drop index。在刪除約束的最后加上刪除索引的關鍵字。
        -
         

        但寫這一大堆都不是這里要重點描述的內容,這里要寫的是怎么知道已經創建好的索引到底是第一種方式創建的?還是第二種方式創建的呢?

        在Oracle的SYS.IND$視圖中有一個叫PROPERTY的字段,里面記錄的就是每個索引對應的屬性,這個字段的含義是在創建這個表的SQL中有定義的。在10G的版本中,可以到$Oracle_HOME/rdbms/admin/sql.bsp中查找ind$表的創建腳本;在11G的版本中,可以到相同的位置的dcore.bsp中查找。這些腳本都是創建系統核心表的腳本,很多字段在官方文檔中沒有注釋的,可以來這里找找看。在11G中對PROPERTY字段的注釋如下:

        property number not null, /* immutable flags for life of the index */
        /* unique : 0x01 */
        /* partitioned : 0x02 */
        /* reverse : 0x04 */
        /* compressed : 0x08 */
        /* functional : 0x10 */
        /* temporary table index: 0x20 */
        /* session-specific temporary table index: 0x40 */
        /* index on embedded adt: 0x80 */
        /* user said to check max length at runtime: 0x0100 */
        /* domain index on IOT: 0x0200 */
        /* join index : 0x0400 */
        /* system managed domain index : 0x0800 */
        /* The index was created by a constraint : 0x1000 */
        /* The index was created by create MV : 0x2000 */
        /* composite domain index : 0x8000 */

        這個是典型的Oracle的表示方法,其中每個值表示一個含義,但是多個值是可以累加起來表示多個含義的。比如一個UNIQUE的REVERSE的索引,對應的值就會是0X05,PROPERTY中對應的是10進制的存放,就應該也是5。

        可以用下面的SQL來查詢主鍵跟索引的關系是第一種還是第二種:
        SELECT DECODE(BITAND(PROPERTY, 4096), 4096, 'implicit', 'user-generated') GENERATION,
        B.INDEX_NAME
        FROM SYS.IND$ A, USER_INDEXES B, USER_OBJECTS C
        WHERE B.UNIQUENESS = 'UNIQUE'
        AND A.OBJ# = C.OBJECT_ID
        AND B.INDEX_NAME = C.OBJECT_NAME
        AND B.INDEX_NAME = 'INDEX_NAME';
        上面的SQL就是說如果PROPERTY為4096,那么對應到16進制應該是0X1000,也就表示The index was created by a constraint,也就是第一種;其他都是第二種,這種情況下典型的值就是4097,也就是0X1000和0X01值的和。


        本文出自:億恩科技【www.endtimedelusion.com】

        服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

      1. 您可能在找
      2. 億恩北京公司:
      3. 經營性ICP/ISP證:京B2-20150015
      4. 億恩鄭州公司:
      5. 經營性ICP/ISP/IDC證:豫B1.B2-20060070
      6. 億恩南昌公司:
      7. 經營性ICP/ISP證:贛B2-20080012
      8. 服務器/云主機 24小時售后服務電話:0371-60135900
      9. 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
      10. 專注服務器托管17年
        掃掃關注-微信公眾號
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
          0
         
         
         
         

        0371-60135900
        7*24小時客服服務熱線

         
         
        av不卡不卡在线观看_最近2018年中文字幕_亚洲欧美一区二区三区_一级A爱做片免费观看国产_日韩在线中文天天更新_伊人中文无码在线