一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Oracle數(shù)據(jù)庫表與視圖

 執(zhí)著男孩 2006-09-09
Oracle數(shù)據(jù)庫表與視圖
作者:無從考證  來源:不詳  發(fā)布時間:2005-9-12 14:48:06  發(fā)布人:admin
 Oracle數(shù)據(jù)庫數(shù)據(jù)對象中最基本的是表和視圖,其他還有約束、序列、函數(shù)、存儲過程、包、觸發(fā)器等。對數(shù)據(jù)庫的操作可以基本歸結(jié)為對數(shù)據(jù)對象的操作,理解和掌握Oracle數(shù)據(jù)庫對象是學習Oracle的捷徑。
  表和視圖
  Oracle中表是數(shù)據(jù)存儲的基本結(jié)構(gòu)。ORACLE8引入了分區(qū)表和對象表,ORACLE8i引入了臨時表,使表的功能更強大。視圖是一個或多個表中數(shù)據(jù)的邏輯表達式。本文我們將討論怎樣創(chuàng)建和管理簡單的表和視圖。
  管理表
  表可以看作有行和列的電子數(shù)據(jù)表,表是關(guān)系數(shù)據(jù)庫中一種擁有數(shù)據(jù)的結(jié)構(gòu)。用CREATE TABLE語句建立表,在建立表的同時,必須定義表名,列,以及列的數(shù)據(jù)類型和大小。例如:
    CREATE TABLE products
  ( PROD_ID NUMBER(4),
   PROD_NAME VAECHAR2(20),
   STOCK_QTY NUMBER(5,3)
  ); 
  這樣我們就建立了一個名為products的表, 關(guān)鍵詞CREATE TABLE后緊跟的表名,然后定義了三列,同時規(guī)定了列的數(shù)據(jù)類型和大小。
  在創(chuàng)建表的同時你可以規(guī)定表的完整性約束,也可以規(guī)定列的完整性約束,在列上普通的約束是NOT NULL,關(guān)于約束的討論我們在以后進行。
  在建立或更改表時,可以給表一個缺省值。缺省值是在增加行時,增加的數(shù)據(jù)行中某一項值為null時,oracle即認為該值為缺省值。
  下列數(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ī)則
  表名標識一個表,所以應(yīng)盡可能在表名中描述表,oracle中表名或列名最長可以達30個字符串。表名應(yīng)該以字母開始,可以在表名中包含數(shù)字、下劃線、#、$等。
  從其它表中建立表
  可以使用查詢從基于一個或多個表中建立表,表的列的數(shù)據(jù)類型和大小有查詢結(jié)果決定。建立這種形式的表的查詢可以選擇其他表中所有的列或者只選擇部分列。在CREATE TABLE語句中使用關(guān)鍵字AS,例如:
SQL>CREATE TABLE emp AS SELECT * FROM employee
TABLE CREATED
SQL> CREATE TABLE Y AS SELECT * FROM X WHERE no=2 
  需要注意的是如果查詢涉及LONG數(shù)據(jù)類型,那么CREATE TABLE....AS SELECT....將不會工作。
  更改表定義
  在建立表后,有時候我們可能需要修改表,比如更改列的定義,更改缺省值,增加新列,刪除列等等。ORACLE使用ALTER TABLE語句來更改表的定義
  1、增加列
  語法:
ALTER TABLE [schema.] table_name ADD column_definition 
  例:
ALTER TABLE orders ADD order_date DATE;
TABLE ALTER 
  對于已經(jīng)存在的數(shù)據(jù)行,新列的值將是NULL.
  2、更改列
  語法:
ALTER TABLE [schema.] table_name MODIFY column_name new_attributes; 
  例:
ALTER TABLE orders MODITY (quantity number(10,3),status varchar2(15)); 
  這個例子中我們修改了表orders,將STATUS列的長度增加到15,將QUANTITY列減小到10,3;
  修改列的規(guī)則如下:
   . 可以增加字符串數(shù)據(jù)類型的列的長度,數(shù)字數(shù)據(jù)類型列的精度。
   . 減少列的長度時,該列應(yīng)該不包含任何值,所有數(shù)據(jù)行都為NULL.
   . 改變數(shù)據(jù)類型時,該列的值必須是NULL.
   . 對于十進制數(shù)字,可以增加或減少但不能降低他的精度。

 
===========================
 
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ù)、視圖、程序等都將被視為非法。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲精品深夜福利视频| 日本av在线不卡一区| 精品人妻一区二区三区免费| 日韩高清一区二区三区四区 | 初尝人妻少妇中文字幕在线| 国产原创激情一区二区三区| 国产午夜福利片在线观看| 日韩精品一区二区不卡| 国产午夜福利在线免费观看| 国产又大又硬又粗又湿| 五月综合婷婷在线伊人| 国产精品不卡一区二区三区四区| 国产女优视频一区二区| 熟女中文字幕一区二区三区| 国产女性精品一区二区三区| 成人你懂的在线免费视频| 亚洲国产精品无遮挡羞羞| 在线播放欧美精品一区| 国产一二三区不卡视频| 欧美性欧美一区二区三区| 激情视频在线视频在线视频| 国产免费一区二区三区不卡| 久久精品久久久精品久久| 国产乱淫av一区二区三区| 日本午夜乱色视频在线观看| 国内精品美女福利av在线| 99久久成人精品国产免费| 日韩夫妻午夜性生活视频| 国产又粗又猛又爽色噜噜| 亚洲男女性生活免费视频| 污污黄黄的成年亚洲毛片| 东北女人的逼操的舒服吗| 中文字幕人妻一区二区免费| 成人免费在线视频大香蕉| 亚洲国产精品久久精品成人| 亚洲成人精品免费在线观看| 亚洲深夜精品福利一区| 欧美日韩精品久久亚洲区熟妇人| 国产av精品一区二区| 国产又色又爽又黄的精品视频| 中文字幕精品少妇人妻|