Oracle數據庫數據對象中最基本的是表和視圖,其他還有約束、序列、函數、存儲過程、包、觸發(fā)器等。對數據庫的操作可以基本歸結為對數據對象的操作,理解和掌握Oracle數據庫對象是學習Oracle的捷徑。 表和視圖 Oracle中表是數據存儲的基本結構。ORACLE8引入了分區(qū)表和對象表,ORACLE8i引入了臨時表,使表的功能更強大。視圖是一個或多個表中數據的邏輯表達式。本文我們將討論怎樣創(chuàng)建和管理簡單的表和視圖。 管理表 表可以看作有行和列的電子數據表,表是關系數據庫中一種擁有數據的結構。用CREATE TABLE語句建立表,在建立表的同時,必須定義表名,列,以及列的數據類型和大小。例如:
這樣我們就建立了一個名為products的表, 關鍵詞CREATE TABLE后緊跟的表名,然后定義了三列,同時規(guī)定了列的數據類型和大小。 在創(chuàng)建表的同時你可以規(guī)定表的完整性約束,也可以規(guī)定列的完整性約束,在列上普通的約束是NOT NULL,關于約束的討論我們在以后進行。 在建立或更改表時,可以給表一個缺省值。缺省值是在增加行時,增加的數據行中某一項值為null時,oracle即認為該值為缺省值。 下列數據字典視圖提供表和表的列的信息: . DBA_TABLES . DBA_ALL_TABLES . USER_TABLES . USER_ALL_TABLES . ALL_TABLES . ALL_ALL_TABLES . DBA_TAB_COLUMNS . USER_TAB_COLUMNS . ALL_TAB_COLUMNS 表的命名規(guī)則 表名標識一個表,所以應盡可能在表名中描述表,oracle中表名或列名最長可以達30個字符串。表名應該以字母開始,可以在表名中包含數字、下劃線、#、$等。 從其它表中建立表 可以使用查詢從基于一個或多個表中建立表,表的列的數據類型和大小有查詢結果決定。建立這種形式的表的查詢可以選擇其他表中所有的列或者只選擇部分列。在CREATE TABLE語句中使用關鍵字AS,例如:
需要注意的是如果查詢涉及LONG數據類型,那么CREATE TABLE....AS SELECT....將不會工作。 更改表定義 在建立表后,有時候我們可能需要修改表,比如更改列的定義,更改缺省值,增加新列,刪除列等等。ORACLE使用ALTER TABLE語句來更改表的定義 1、增加列 語法:
例:
對于已經存在的數據行,新列的值將是NULL. 2、更改列 語法:
例:
這個例子中我們修改了表orders,將STATUS列的長度增加到15,將QUANTITY列減小到10,3; 修改列的規(guī)則如下: . 可以增加字符串數據類型的列的長度,數字數據類型列的精度。 . 減少列的長度時,該列應該不包含任何值,所有數據行都為NULL. . 改變數據類型時,該列的值必須是NULL. . 對于十進制數字,可以增加或減少但不能降低他的精度。 3、刪除數據列 優(yōu)化ORACLE數據庫,唯一的方法是刪除列,重新建立數據庫。在ORACLE8i中有很多方法刪除列,你可以刪除未用數據列或者可以標示該列為未用數據列然后刪除。 刪除數據列的語法是:
要注意的是在刪除列時關于該列的索引和完整性約束也同時刪除。注意關鍵字CASCADE CONSTRAINS,如果刪除的列是多列約束的一部分,那么這個約束條件相對于其他列也同時刪除。 如果用戶擔心在大型數據庫中刪除列要花太多時間,可以先將他們標記為未用數據列,標記未用數據列的語法如下:
這個語句將一個或多個數據列標記為未用數據列,但并不刪除數據列中的數據,也不釋放占用的磁盤空間。但是,未用數據列在視圖和數據字典中并不顯示,并且該數據列的名稱將被刪除,新的數據列可以使用這個名稱。基于該數據列的索引、約束,統(tǒng)計等都將被刪除。 刪除未用數據列的語句是:
刪除表和更改表名 刪除表非常簡單,但它是一個不可逆轉的行為。 語法:
刪除表后,表上的索引、觸發(fā)器、權限、完整性約束也同時刪除。ORACLE不能刪除視圖,或其他程序單元,但oracle將標示他們無效。如果刪除的表涉及引用主鍵或唯一關鍵字的完整性約束時,那么DROP TABLE語句就必須包含CASCADE CONSTRAINTS子串。 更改表名 RENAME命令用于給表和其他數據庫對象改名。ORACLE系統(tǒng)自動將基于舊表的完整性約束、索引、權限轉移到新表中。ORACLE同時使所有基于舊表的數據庫對象,比如視圖、程序、函數等,為不合法。 語法:
例:
截短表 TRUNCATE命令與DROP命令相似, 但他不是刪除整個數據表,所以索引、完整性約束、觸發(fā)器、權限等都不會被刪除。缺省情況下將釋放部分表和視圖空間,如果用戶不希望釋放表空間,TRUNCATE語句中要包含REUSE STORAGE子串。TRUNCATE命令語法如下:
例:
管理視圖 視圖是一個或多個表中的數據的簡化描述,用戶可以將視圖看成一個存儲查詢(stored query)或一個虛擬表(virtual table).查詢僅僅存儲在oracle數據字典中,實際的數據沒有存放在任何其它地方,所以建立視圖不用消耗其他的空間。視圖也可以隱藏復雜查詢,比如多表查詢,但用戶只能看見視圖。視圖可以有與他所基于表的列名不同的列名。用戶可以建立限制其他用戶訪問的視圖。 建立視圖 CREATE VIEW命令創(chuàng)建視圖,定義視圖的查詢可以建立在一個或多個表,或其他視圖上。查詢不能有FOR UPDATE子串,在早期的ORACLE8i版本中不支持ORDER BY子串,現在的版本中CREATE VIEW可以擁有ORDER BY子串。 例:
用戶可以在創(chuàng)建視圖的同時更改列名,方法是在視圖名后立即加上要命名的列名。重新定義視圖需要包含OR REPLACE子串。
如果在創(chuàng)建的視圖包含錯誤在正常情況下,視圖將不會被創(chuàng)建。但如果你需要創(chuàng)建一個帶錯誤的視圖必須在CREATE VIEW語句中帶上FORCE選項。如:
這樣將創(chuàng)建了一個名為ORDER_STATUS的視圖,但這樣的視圖的狀態(tài)是不合法的,如果以后狀態(tài)發(fā)生變化則可以重新編譯,其狀態(tài)也變成合法的。 從視圖中獲得數據 從視圖中獲得數據與從表中獲得數據基本一樣,用戶可以在連接和子查詢中使用視圖,也可以使用SQL函數,以及所有SELECT語句的字串。 插入、更新、刪除數據 用戶在一定的限制條件下可以通過視圖更新、插入、刪除數據。如果視圖連接多個表,那么在一個時間里只能更新一個表。所有的能被更新的列可以在數據字典USER_UPDATETABLE_COLUMNS中查到。 用戶在CREATE VIEW中可以使用了WITH子串。WITH READ ONLY子串表示創(chuàng)建的視圖是一個只讀視圖,不能進行更新、插入、刪除操作。WITH CHECK OPTION表示可以進行插入和更新操作,但應該滿足WHERE子串的條件。這個條件就是創(chuàng)建視圖WHERE子句的條件,比如在上面的例子中用戶創(chuàng)建了一個視圖TOP_EMP,在這個視圖中用戶不能插入salary小于2000的數據行。 刪除視圖 刪除視圖使用DROP VIEW命令。同時將視圖定義從數據字典中刪除,基于視圖的權限也同時被刪除,其他涉及到該視圖的函數、視圖、程序等都將被視為非法。 例:
作者Blog:http://blog.csdn.net/kalex/ |
煤炭網版權與免責聲明:
凡本網注明"來源:煤炭網www.dysmaa.com "的所有文字、圖片和音視頻稿件,版權均為"煤炭網www.dysmaa.com "獨家所有,任何媒體、網站或個人在轉載使用時必須注明"來源:煤炭網www.dysmaa.com ",違反者本網將依法追究責任。
本網轉載并注明其他來源的稿件,是本著為讀者傳遞更多信息的目的,并不意味著本網贊同其觀點或證實其內容的真實性。其他媒體、網站或個人從本網轉載使用時,必須保留本網注明的稿件來源,禁止擅自篡改稿件來源,并自負版權等法律責任。違反者本網也將依法追究責任。 如本網轉載稿件涉及版權等問題,請作者在兩周內盡快來電或來函聯系。
網站技術運營:北京真石數字科技股份有限公司、喀什中煤遠大供應鏈管理有限公司、喀什煤網數字科技有限公司
總部地址:北京市豐臺區(qū)總部基地航豐路中航榮豐1層
京ICP備18023690號-1 京公網安備 11010602010109號