Oracle - 約束、索引等相關常用操作語句

襲冷發表於2018-01-15

一、表約束

        -- 新增主鍵
        ALTER TABLE 表名稱 ADD CONSTRAINT 主鍵名稱 PRIMARY KEY(欄位名稱);
        -- 增加外來鍵  
        ALTER TABLE 當前表名稱 ADD CONSTRAINT 外來鍵名 FOREIGN KEY (當前表欄位名) REFERENCES 關聯表名稱 (關聯表欄位名稱);  
        
        -- 增加非空約束
        ALTER TABLE 表名稱 MODIFY 欄位名稱 DATATYPE NOT NULL;
        -- 去除非空約束
        ALTER TABLE 表名稱 MODIFY 欄位每次 DATATYPE NULL;   

        -- 新增唯一約束
        ALTER TABLE 表名稱 ADD CONSTRAINT 約束名稱 UNIQUE(欄位名稱);
        -- 新增其他約束
        ALTER TABLE 表名稱 ADD CONSTRAINT 約束名稱 CHECK(條件一 OR|AND 條件二);    

        -- 禁用約束
        ALTER TABLE 表名稱 DISABLE CONSTRAINT 約束名稱;
        -- 啟用約束
        ALTER TABLE 表名稱 ENABLE CONSTRAINT 約束名稱;  

        -- 重新命名約束
        ALTER TABLE 表名稱 RENAME CONSTRAINT 舊約束名稱 TO 新約束名稱

        -- 檢視約束
        select table_name,constraint_name,constraint_type, SEARCH_CONDITION from user_constraints where table_name='表名(大寫)';  
        -- 刪除約束
        alter table student drop constraint 約束名稱;
二、表索引    
        -- 建立索引
        CREATE INDEX 索引名稱 ON 表名稱 (欄位名稱,欄位名稱) TABLESPACE 表空間名稱; 
        
        -- 檢視索引
        SELECT 
            UIC.*,IDX.INDEX_TYPE FROM USER_IND_COLUMNS UIC,USER_INDEXES IDX 
        WHERE 
            UIC.INDEX_NAME = IDX.INDEX_NAME AND UIC.TABLE_NAME='表名稱(大寫)';     
            
        -- 刪除索引
        DROP INDEX 使用者名稱.索引名;  -- 當表結構被刪除時,其相關的所有索引也隨之被刪除
三、其他相關
        -- 檢視包/儲存過程的定義
        SELECT OWNER,NAME,TYPE,LINE,TEXT FROM ALL_SOURCE WHERE OWNER = UPPER('使用者名稱') AND TYPE = 'PACKAGE'; 
   
        -- 檢視使用者物件(表/過程/等)的詳細資料
        SELECT * FROM USER_OBJECTS WHERE OBJECT_NAME='PDTYPES'; 
    
        -- 檢視觸發器
        SELECT TRIGGER_NAME FROM ALL_TRIGGERS;  -- 檢視所有觸發器的名稱
        SELECT TEXT FROM ALL_SOURCE WHERE TYPE='TRIGGER' AND NAME='觸發器名稱';  -- 檢視觸發器的定義
        
        -- 檢視序列及其相關屬性
        SELECT * FROM DBA_SEQUENCES;


相關文章