博文結構
事務的使用
索引的使用
視圖的做用
序列、同義詞的使用
分區表的概念數據庫
Oracle經過事務來保證數據庫中數據的一致性。安全
事務就是業務上的一個邏輯單元,它可以保證其中對數據全部的操做要麼所有成功,要麼所有失敗less
事務開始於一條可執行的SQL語句,繼續執行事務主體,而後結束於如下的任意一種狀況。分佈式
顯式提交(commit): 當事務遇到cormmit指令時,將結束事務並永久保存全部更改的數據。ide
顯式回滾(ollback); 當事務遇到rollback指令時,也將結束事務的執行,可是此時它回滾
全部更改的數據到事務開始時的原始值,即取消更改。工具
DDL語句:一旦用戶執行了DDL (Data DefinitionLanguage,數據定義語言,如 CREATE. DROP
等)語句,則以前全部的DML (Data Manipulation Language,數據操做語言)操做將做爲一
個事務提交.這種提交稱爲隱式提交。性能
正常結束程序:若是Oracle數據庫應用程序正常結束,如使用SQL Plus工具更改了數據,
而正常退出該程序(輸入"exit"), 則Oracle 自動提交事務。spa
非正常地結束程序:當程序崩潰或意外停止時,全部數據更改都被回滾,這種回滾稱爲隱
式回滾。.翻譯
事務的四個特性,即原子性(Atomicity). - 致性(Consistency)、隔離性. (Isolation)和持久性(Durability). 簡寫爲ACID特性。code
(1)原子性:要麼同時成功,要麼同時失敗,
(2) 一致性:不管是在事務前、事務中,仍是在事務後,數據庫始終處於一致的狀態。
事務控制
SQL> create tablespace sales 2 datafile '/space/sales.dbf' size 100M; 表空間已建立。
SQL> select tablespace_name from dba_tablespaces; TABLESPACE_NAME -------------------------------------------------------------------------------- SYSTEM SYSAUX UNDOTBS1 TEMP USERS SALES 已選擇 6 行。
SQL> create table sales 2 (name varchar(50), 3 sex varchar(10), 4 address varchar(100), 5 results float(10)) 6 tablespace sales; 表已建立。
SQL> insert into sales values('zhangsan','nan','haidian',90); 已建立 1 行。
SQL> commit; 提交完成。
SQL> rollback; 回退已完成。
索引是Oracle的一個對象,是與表關聯的可選結構,提供了-種快速訪問數據的途徑,提升了數據庫的檢索性能。索引使數據庫程序無須對整個表進行掃描,就能夠在其中找到所須要的數據。
索引的特色以下:
適當地使用索引能夠提升查詢速度。
能夠對錶的一-列或多列創建索引。
創建索引的數量沒有限制
索引須要磁盤存儲,能夠指定表空間,由Oracle自動維護。
索引對用戶透明,檢索時是否使用索引是由Oracle決定的。
全表掃描。
使用索引。
案例:
SQL> create index sales_name_index 2 on sales(address); 索引已建立。
SQL> create unique index sales_name_unique_index on sales(name); 索引已建立。
SQL> create index sales_reverse_index on sales(results) reverse; 索引已建立。
SQL> create bitmap index sales_bit_index on sales(sex); 索引已建立。
頻繁搜索的列能夠做爲索引。 常常排序、分組的列能夠做爲索引。 常常用做鏈接的列(主鍵/外鍵)能夠做爲索引。 將索引放在一 個單獨的表空間中,不要放在有回退段、 臨時段和表的表空間中。 對大型索引而言,考慮使用NOLOGGING子句建立。 根據業務數據發生的頻率按期從新生成或從新組織索引,以進行碎片整理。 根據業務數據發生的頻率按期 從新生成或從新組織索引,以進行碎片整理。 不要在下面狀況建立索引: 僅包含幾個不一樣值的列。 表中僅包含幾行。
視圖(View) 是- -個虛表,不佔用物理空間,由於視圖自己的定義語句存儲在數據字典中。視圖中的數據是從一個或多個實際表中得到的。那些用於產生視圖的表叫做視圖的基表。一個視圖也能夠在另外一個視圖中產生,。
物化視圖(Materialized View) 也稱實體化視圖、快照(Oracle 8i之前的說法),含有數據,佔用存儲空間,在數據倉庫中頗有實用價值。
視圖隱藏了數據的複雜性, 視圖簡化了用戶的命令, 視圖將應用程序與基表定義的修改隔離開來, 視圖經過重命名列.
序列是用來生成惟一的、 連續的整數類型的數據庫對象。序列一般用來自動生成主鍵或惟一鍵的值。序列能夠按升序排列,也能夠按降序排列。例如,銷售流水錶中的流水號可使用序列自動
生成。
SQL> create sequence sale_seq 2 start with 1 3 increment by 1 4 nomaxvalue 5 nocycle; 序列已建立。
SQL> create table project(id int,name varchar2(10)); 表已建立。
SQL> create table project(id int,name varchar2(10)); 表已建立。 SQL> insert into project values(sale_seq.nextval,'zhangsan'); 已建立 1 行。 提交完成。 SQL> insert into project values(sale_seq.nextval,'lisi'); 已建立 1 行。 提交完成。 SQL> select * from project; ID NAME ---------- ------------------------------ 1 zhangsan 2 lisi
SQL> select sale_seq.currval from dual; CURRVAL ---------- 2
SQL> alter sequence sale_seq 2 maxvalue 5000 3 cycle; 序列已更改。
SQL> select sequence_name,increment_by,cache_size from user_sequences where 2 sequence_name='SALE_SEQ'; SEQUENCE_NAME -------------------------------------------------------------------------------- INCREMENT_BY CACHE_SIZE ------------ ---------- SALE_SEQ 1 20
同義詞是對象的一個別名,不佔用任何實際的存儲空間,只在Oracle 的數據字典中保存其定義描述。在使用同義詞時,Oracle 會將其翻譯爲對應對象的名稱。
1)簡化SQL語句
2)隱藏對象的名稱和全部者
3)爲分佈式數據庫的遠程對象提供位置透明性
4)提供對數據庫對象的公共訪問
同義詞可分爲如下兩類
1)私有同義詞
2)公有同義詞
分區表的含義
Oracle容許用戶把-個表中的全部行分紅幾部分,並將他們存儲在不一樣的表空間。分紅的每部分稱爲一個分區,被分區的表稱爲分區表(Partition).
改善表的查詢性能。在對錶進行分區後,用戶執行SaL查詢時能夠只訪問表中的特定分區
而非整個表.表更容易管理。由於分區表的數據存儲在多個部分中,按分區加載和刪除數據比在表中加
載和刪除更容易。
便於備份和恢復。能夠獨立地備份和恢復每一個分區。提升數據安全性。將不一樣的分區分佈在不一樣的磁盤,能夠減少全部分區的數據同時損壞的可能性。
案例:
建立表而且分區,以age分區。 create table student ( id number, name varchar2(10), age number) partition by range (age) ( partition p1 values less than (10), partition p2 values less than (20), partition p3 values less than (maxvalue) ); 二、向表中插入數據 insert into student values(1,'t1',8); insert into student values(2,'t2',9); insert into student values(3,'t3',15); insert into student values(4,'t4',18); insert into student values(5,'t5',50); 三、分別查詢p1,p2,p3的數據 select * from student partition(p1); select * from student partition(p2); select * from student partition(p3); 四、要刪除小於10歲的數據。 delete from student partition(p1);