Oracle事務和經常使用數據庫對象

博文結構
事務的使用
索引的使用
視圖的做用
序列、同義詞的使用
分區表的概念數據庫

一.事務

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 行。
  • 建立表sales並將其放在sales空間中
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;

回退已完成。
  • 自動提交
    SQL> set autocommit on;

二.索引

  • 索引的含義

索引是Oracle的一個對象,是與表關聯的可選結構,提供了-種快速訪問數據的途徑,提升了數據庫的檢索性能。索引使數據庫程序無須對整個表進行掃描,就能夠在其中找到所須要的數據。
索引的特色以下:

適當地使用索引能夠提升查詢速度。
能夠對錶的一-列或多列創建索引。
創建索引的數量沒有限制
索引須要磁盤存儲,能夠指定表空間,由Oracle自動維護。
索引對用戶透明,檢索時是否使用索引是由Oracle決定的。

  • Oracle的數據庫管理系統在訪問數據時使用如下兩種訪問方法.

全表掃描。
使用索引。

  • 索引的分類
  1. B樹索引
    索引的頂部爲根,其中包含指向下一級索引的項。下一級爲分支塊,分支塊又指向索引中下一級的塊。最低一級的塊稱爲葉節點,其中包含指向表數據行的索引項。葉節點爲雙向連接,有助於
    按關鍵字值的升序和降序掃描索引。
    如圖:

Oracle事務和經常使用數據庫對象

案例:

  • 對sales表的address列建立B樹索引sales_address_index
SQL> create index sales_name_index
  2  on sales(address);

索引已建立。
  • 對sales表的name列建立惟一索引sales_name_unique_index
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;

序列已建立。
  • 建立表project
SQL> create table project(id int,name varchar2(10));

表已建立。
  • 向project表添加記錄
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
  • 查看序列的CURRVAL值
SQL> select sale_seq.currval from dual;

   CURRVAL
----------
     2
  • 修改序列的最大值到5000
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);
相關文章
相關標籤/搜索