一、什么是數據庫對象
數據庫對象是數據庫里面用來存儲和指向數據的各種概念和結構的總稱。數據庫支持的對象包括:
? 表:表是一個邏輯概念,是數據庫組織管理數據的基本單位。
? 索引:索引是建立在表上的邏輯對象,索引可以提高表數據的訪問查詢效率。
? 視圖:視圖是一種虛定義的邏輯對象,結構和數據是建立在對表的查詢基礎之上的。
? 序列:序列可以產生一組等間隔的數值,主要用于表的主鍵的自增。
? 同義詞:數據對象的別名,與其代表的數據對象是一種映射關系。
? 存儲過程:一組為了完成特定功能的SQL/PLSQL語句集。
? 觸發器:一種特殊類型的存儲過程,通過指定的事件觸發執行。
二、管理對象
(一)管理表
? 表概述:一個表描述了一個實體,表定義為列的集合。表中的每一列都設計為存儲某種類型的信息,表上可以有約束、默認值等用于確保數據的有效性。
? 建表語法:
? ?
SQL> CREATE TABLE [user_name.]table_name(column_name1 data_type(size) [constraints],column_name2 data_type(size) [constraints],column_name3 data_type(size) [constraints],....);
?
? `user_name`:用戶名,如果省略,默認是創建在當前連接用戶下。
? `table_name`:表名。
? `column_name1、column_name2、column_name3`:列名。
? `data_type`:數據類型(例如`VARCHAR2`、`CHAR`等)。
? `size`:列的最大長度(例如`VARCHAR2(10)`、`CHAR(10)`等)。
? `constraints`:限制加入的表約束,如:`NOT NULL`、`DEFAULT`等。
? 修改表:
? 修改表名:? ? ?
SQL> ALTER TABLE area_04 RENAME TO area_05;
? 修改列名:
SQL> ALTER TABLE area_05 RENAME COLUMN area_name TO area_name_01;
? 修改列長度:
SQL> ALTER TABLE area_05 MODIFY area_name_01 VARCHAR(80);
? 添加字段:
SQL> ALTER TABLE area_05 ADD NUM number(20);
? 刪除字段:
SQL> ALTER TABLE area_05 DROP COLUMN num;
(二)管理索引
? 索引的作用:索引是用來快速訪問數據的一種數據結構。根據業務合理的創建索引可以提高查詢的效率。
? 創建索引語法:
SQL> CREATE INDEX [user_name.] index_name ON table_name(column_name)
? `user_name`:用戶名,如果省略,默認是創建在當前連接用戶下。
? `index_name`:索引名。
? `table_name`:表名。
? `column_name`:列名。
? 創建索引:
SQL> CREATE INDEX idx_area_06_info_1 ON area_06 (area_no);
? 修改索引:
? 讓索引對優化器不可見:
SQL> ALTER INDEX idx_area_06_info_1 INVISIBLE;
? 讓索引對優化器可見:
SQL> ALTER INDEX idx_area_06_info_1 VISIBLE;
? 刪除索引:
?
SQL> DROP INDEX idx_area_06_info_1;
? 索引重建:
SQL> ALTER INDEX idx_area_06_info_1 REBUILD;
?
? 設置索引不可用:
SQL> ALTER INDEX idx_area_06_info_1 UNUSABLE;
?
(三)管理視圖
? 視圖的定義:用戶可以將一個使用頻率較高的查詢語句定義為一個持久化的對象,該持久化對象稱為視圖。
? 視圖的作用:
? 簡化查詢,使用視圖代替使用頻率較高的查詢,特別是復雜查詢,可以降低用戶編寫SQL的復雜度。
? 解耦合,在保證視圖列的名稱、數據類型不變的前提下,修改基表其他元素的定義不影響視圖的正常使用。
? 權限隔離,視圖作為一個獨立的對象,用戶在視圖上的權限與在基表上的權限是分離的。合理地設計視圖列及權限,可以有效避免基表中的全部信息完全暴露給只需部分信息(視圖列)的用戶。
? 創建視圖語法:
SQL> CREATE [OR REPLACE] VIEW view_name AS subquery;
? `OR REPLACE`:如果已經存在了就替換已經存在的。
? `view_name`:視圖名。
? `subquery`:查詢語句。
? 創建視圖:
SQL> CREATE OR REPLACE VIEW v_area_06 AS SELECT area_no,area_name FROM area_06;
? 查詢視圖:
SQL> SELECT * FROM v_area_06;
? 查詢視圖的字段信息:
SQL> DESC v_area_06;
? 刪除視圖:
SQL> DROP VIEW v_area_06;
注意:如果刪除基表,則視圖也會變得不可用。
三、數據庫對象相關視圖
? 對象查詢相關視圖:
? `DBA_OBJECTS`:顯示所有的對象。
? 表相關視圖:
? `DBA_TABLES`:顯示所有的表。
? 索引相關視圖:
? `DBA_INDEXES`:顯示所有的索引。
? 視圖相關視圖:
? `DBA_VIEWS`:顯示所有的視圖。
? 查詢視圖:
? 查詢所有對象:
SQL> SELECT owner,object_name,object_type,status FROM DBA_OBJECTS WHERE owner='SALES';
? 查詢所有表:
SQL> SELECT owner,table_name,tablespace_name FROM DBA_TABLES WHERE owner='SALES';
? 查詢所有索引:
SQL> SELECT owner,index_name,table_name FROM DBA_INDEXES WHERE owner='SALES';
? 查詢視圖對象信息:
SQL> SELECT owner,view_name,text FROM DBA_VIEWS WHERE owner='SALES';
?
四、小結
? 什么是數據庫對象:表、索引、視圖等。
? 管理對象:創建、修改、查看、刪除操作。
? 數據庫對象相關視圖:`DBA_OBJECTS`、`DBA_TABLES`、`DBA_INDEXES`、`DBA_VIEWS`。