===========================
3、刪除數(shù)據(jù)列
優(yōu)化ORACLE數(shù)據(jù)庫,唯一的方法是刪除列,重新建立數(shù)據(jù)庫。在ORACLE8i中有很多方法刪除列,你可以刪除未用數(shù)據(jù)列或者可以標示該列為未用數(shù)據(jù)列然后刪除。 刪除數(shù)據(jù)列的語法是: ALTER TABLE [schema.] table_name DROP {COLUM column_names | (column_names)}[CASCADE CONSTRAINS] 要注意的是在刪除列時關(guān)于該列的索引和完整性約束也同時刪除。注意關(guān)鍵字CASCADE CONSTRAINS,如果刪除的列是多列約束的一部分,那么這個約束條件相對于其他列也同時刪除。 如果用戶擔心在大型數(shù)據(jù)庫中刪除列要花太多時間,可以先將他們標記為未用數(shù)據(jù)列,標記未用數(shù)據(jù)列的語法如下: ALTER TABLE [schema.] table_name SET UNUSED {COLUM column_names | (column_names)}[CASCADE CONSTRAINS] 這個語句將一個或多個數(shù)據(jù)列標記為未用數(shù)據(jù)列,但并不刪除數(shù)據(jù)列中的數(shù)據(jù),也不釋放占用的磁盤空間。但是,未用數(shù)據(jù)列在視圖和數(shù)據(jù)字典中并不顯示,并且該數(shù)據(jù)列的名稱將被刪除,新的數(shù)據(jù)列可以使用這個名稱。基于該數(shù)據(jù)列的索引、約束,統(tǒng)計等都將被刪除。 刪除未用數(shù)據(jù)列的語句是: ALTER TABLE [schema.] table_name DROP {UNUSED COLUM | COLUMN CONTINUE} 刪除表和更改表名 刪除表非常簡單,但它是一個不可逆轉(zhuǎn)的行為。 語法: DROP TABLE [schema.] table_name [CASCADE CONSTRAINTS] 刪除表后,表上的索引、觸發(fā)器、權(quán)限、完整性約束也同時刪除。ORACLE不能刪除視圖,或其他程序單元,但oracle將標示他們無效。如果刪除的表涉及引用主鍵或唯一關(guān)鍵字的完整性約束時,那么DROP TABLE語句就必須包含CASCADE CONSTRAINTS子串。 更改表名 RENAME命令用于給表和其他數(shù)據(jù)庫對象改名。ORACLE系統(tǒng)自動將基于舊表的完整性約束、索引、權(quán)限轉(zhuǎn)移到新表中。ORACLE同時使所有基于舊表的數(shù)據(jù)庫對象,比如視圖、程序、函數(shù)等,為不合法。 語法: RENAME old_name TO new_name; 例: SQL> RENAME orders TO purchase_orders; TABLE RENAMED 截短表 TRUNCATE命令與DROP命令相似, 但他不是刪除整個數(shù)據(jù)表,所以索引、完整性約束、觸發(fā)器、權(quán)限等都不會被刪除。缺省情況下將釋放部分表和視圖空間,如果用戶不希望釋放表空間,TRUNCATE語句中要包含REUSE STORAGE子串。TRUNCATE命令語法如下: TRUNCATE {TABLE|CLUSTER} [schema.] name {DROP|REUSE STORAGE} 例: SQL> TRUNCATE TABLE t1; TABLE truncate. 管理視圖 視圖是一個或多個表中的數(shù)據(jù)的簡化描述,用戶可以將視圖看成一個存儲查詢(stored query)或一個虛擬表(virtual table).查詢僅僅存儲在oracle數(shù)據(jù)字典中,實際的數(shù)據(jù)沒有存放在任何其它地方,所以建立視圖不用消耗其他的空間。視圖也可以隱藏復(fù)雜查詢,比如多表查詢,但用戶只能看見視圖。視圖可以有與他所基于表的列名不同的列名。用戶可以建立限制其他用戶訪問的視圖。 建立視圖 CREATE VIEW命令創(chuàng)建視圖,定義視圖的查詢可以建立在一個或多個表,或其他視圖上。查詢不能有FOR UPDATE子串,在早期的ORACLE8i版本中不支持ORDER BY子串,現(xiàn)在的版本中CREATE VIEW可以擁有ORDER BY子串。 例: SQL> CREATE VIEW TOP_EMP AS SELECT empno EMPLOYEE_ID,ename EMPLOYEE_NAME,salary FROM emp WHERE salary >2000 用戶可以在創(chuàng)建視圖的同時更改列名,方法是在視圖名后立即加上要命名的列名。重新定義視圖需要包含OR REPLACE子串。 SQL> CREATE VIEW TOP_EMP (EMPLOYEE_ID,EMPLOYEE_NAME,SALARY) AS SELECT empno ,ename ,salary FROM emp WHERE salary >2000 如果在創(chuàng)建的視圖包含錯誤在正常情況下,視圖將不會被創(chuàng)建。但如果你需要創(chuàng)建一個帶錯誤的視圖必須在CREATE VIEW語句中帶上FORCE選項。如: CREATE FORCE VIEW ORDER_STATUS AS SELECT * FROM PURCHASE_ORDERS WHERE STATUS=’APPPOVE’; SQL>/ warning :View create with compilation errors 這樣將創(chuàng)建了一個名為ORDER_STATUS的視圖,但這樣的視圖的狀態(tài)是不合法的,如果以后狀態(tài)發(fā)生變化則可以重新編譯,其狀態(tài)也變成合法的。 從視圖中獲得數(shù)據(jù) 從視圖中獲得數(shù)據(jù)與從表中獲得數(shù)據(jù)基本一樣,用戶可以在連接和子查詢中使用視圖,也可以使用SQL函數(shù),以及所有SELECT語句的字串。 插入、更新、刪除數(shù)據(jù) 用戶在一定的限制條件下可以通過視圖更新、插入、刪除數(shù)據(jù)。如果視圖連接多個表,那么在一個時間里只能更新一個表。所有的能被更新的列可以在數(shù)據(jù)字典USER_UPDATETABLE_COLUMNS中查到。 用戶在CREATE VIEW中可以使用了WITH子串。WITH READ ONLY子串表示創(chuàng)建的視圖是一個只讀視圖,不能進行更新、插入、刪除操作。WITH CHECK OPTION表示可以進行插入和更新操作,但應(yīng)該滿足WHERE子串的條件。這個條件就是創(chuàng)建視圖WHERE子句的條件,比如在上面的例子中用戶創(chuàng)建了一個視圖TOP_EMP,在這個視圖中用戶不能插入salary小于2000的數(shù)據(jù)行。 刪除視圖 刪除視圖使用DROP VIEW命令。同時將視圖定義從數(shù)據(jù)字典中刪除,基于視圖的權(quán)限也同時被刪除,其他涉及到該視圖的函數(shù)、視圖、程序等都將被視為非法。 |
|