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