當前位置:
首頁 > 最新 > Oracle總結視圖、索引、事務、用戶許可權、批量操作

Oracle總結視圖、索引、事務、用戶許可權、批量操作

前言

在Oracle總結的第一篇中,我們已經總結了一些常用的SQL相關的知識點了…那麼本篇主要總結關於Oralce視圖、序列、事務的一些內容

在資料庫中,我們可以把各種的SQL語句分為四大類…

(1)DML(數據操縱語言):select,insert,update,delete

(2)DDL(數據定義語言):create table,alter table,drop table,truncate table

(3)DCL(數據控制語言):grant select any table to scott/revoke select any table from scott

(4)TCL(事務控制語言):commit,rollback,savepoint to 回滾點

批量操作

何為批量操作,就是一次性插入多條數據….在SQL中,我們查詢出來的數據可看成是一張表,那麼我們在插入數據的時候,可以根據查詢出來的數據進行插入…這就可以看成是批量操作…

值得注意的是,如果沒有指定插入哪些欄位的話,那麼查詢出來的全部欄位均會插入表中..

刪除操作對比

我們的刪除語法有三種:

delete from

truncate from

drop from

我們來對比一下他們的區別:

drop table

1)屬於DDL

2)不可回滾

3)不可帶where

4)表內容和結構刪除

5)刪除速度快

truncate table

1)屬於DDL

2)不可回滾

3)不可帶where

4)表內容刪除

5)刪除速度快

delete from

1)屬於DML

2)可回滾

3)可帶where

4)表結構在,表內容要看where執行的情況

5)刪除速度慢,需要逐行刪除

事務

事務其實我們在JDBC章節中已經講解過了,詳情可查看我JDBC的博文。

再次明確一下:事務就是讓一個不可分割的子操作形成一個整體,該整體要麼全部執行成功,要麼全部執行失敗

我們值得注意的是Oracle中的事務與Mysql中的事務操作是有些不同的:

Oracle的事務開始:

第一條DML操作做為事務開始【並不需要手動開啟事務】

Oracle的提交事務

(1)顯示提交:commit

(2)隱藏提交:DDL/DCL/exit(sqlplus工具)【注意】

Oracle的回滾事務

(1)顯示回滾:rollback

(2)隱藏回滾:關閉窗口(sqlplus工具),死機,掉電

因為Oracle有實例池這個概念,所以Oracle支持回滾

這裡寫圖片描述

Oracle默認支持的隔離級別是:read commited

Mysql默認支持的隔離級別是:reapatable read

訪問其他用戶的對象

在上一篇博文已經說了,Oracle將表/用戶都看成是對象…那麼我們怎麼在scott用戶下訪問hr用戶下的表呢???

其實,我們只要在訪問表的時候,指定具體的用戶.資料庫表就行了,但是呢,還要看看該用戶有沒有許可權查詢別的用戶的數據表,於是就需要賦予許可權了

視圖

視圖是一種基於數據表的一種虛表

(1)視圖是一種虛表

(2)視圖建立在已有表的基礎上, 視圖賴以建立的這些表稱為基表

(3)向視圖提供數據內容的語句為 SELECT 語句,可以將視圖理解為存儲起來的 SELECT 語句

(4)視圖向用戶提供基表數據的另一種表現形式

(5)視圖沒有存儲真正的數據,真正的數據還是存儲在基表中

(6)程序員雖然操作的是視圖,但最終視圖還會轉成操作基表

(7)一個基表可以有0個或多個視圖

為什麼要用到視圖?

有的時候,我們可能只關係一張數據表中的某些欄位,而另外的一些人只關係同一張數據表的某些欄位…

那麼把全部的欄位都都顯示給他們看,這是不合理的。我們應該做到:他們想看到什麼樣的數據,我們就給他們什麼樣的數據…一方面就能夠讓他們只關注自己的數據,另一方面,我們也保證數據表一些保密的數據不會泄露出來…

這裡寫圖片描述

還有另外一個原因:

我們在查詢數據的時候,常常需要編寫非常長的SQL語句,幾乎每次都要寫很長很長….上面已經說了,視圖就是基於查詢的一種虛表,也就是說,視圖可以將查詢出來的數據進行封裝。。。那麼我們在使用的時候就會變得非常方便…

小總結:

(1)如果你不想讓用戶看到所有數據(欄位,記錄),只想讓用戶看到某些的數據時,此時可以使用視圖

(2)當你需要減化SQL查詢語句的編寫時,可以使用視圖,但不提高查詢效率

同義詞

我們在使用多表查詢,或者查詢出來的表欄位意義不清晰的時候,我們就使用別名來替代….當然了,別名只針對列名或表名

現在,我們已經知道的對象有用戶/視圖/表等等其他對象了,Oracle也提供了同義詞【類似於別名】給我們進行使用

同義詞的作用

(1)縮短對象名字的長度

(2)方便訪問其它用戶的對象

序列

Mysql的自動增長可以直接在創建表的時候,在欄位後面跟上auto increament關鍵字就行了。那Oracle 有沒有自動增長策略呢???

Oracle使用的是序列這麼一個對象….

(1)類似於MySQL中的auto_increment自動增長機制,但Oracle中無auto_increment機制

(2)是oracle提供的一個產生唯一數值型值的機制

(3)通常用於表的主健值

(4)序列只能保證唯一,不能保證連續

聲明:oracle中,只有rownum永遠保持從1開始,且繼續

(5)序列值,可放於內存,取之較快

那oralce中的序列和Mysql中的自動增長有啥區別???

Mysql每張表都會維護一個自動增長的程序…

Oralce會把序列存放在內存中,可以供幾張表使用…

這裡寫圖片描述

有的同學可能會疑問,我們在分頁的時候用到了rownum這麼一個偽列,為啥不用它來做自動增長的呢???

rownum的值雖然是唯一和連續的,但是不能一直唯一標識該記錄…也就是說,一旦該記錄刪除了,那麼rownum的值是會變的

為什麼要用序列

(1)以前我們為主健設置值,需要人工設置值,容易出錯

(2)以前每張表的主健值,是獨立的,不能共享

索引

什麼是索引

什麼是索引【Index】

(1)是一種快速查詢表中內容的機制,類似於新華字典的目錄

(2)運用在表中某個/些欄位上,但存儲時,獨立於表之外

為什麼要用索引

為什麼要用索引

(1)通過指針加速Oracle伺服器的查詢速度

(2)通過rowid快速定位數據的方法,減少磁碟I/O

rowid是oracle中唯一確定每張表不同記錄的唯一身份證

索引表把數據變成是有序的….

這裡寫圖片描述

快速定位到硬碟中的數據文件…

這裡寫圖片描述

rowid特點

rowid的特點

(1)位於每個表中,但表面上看不見,例如:desc emp是看不見的

(2)只有在select中,顯示寫出rowid,方可看見

(3)它與每個表綁定在一起,表亡,該表的rowid亡,二張表rownum可以相同,但rowid必須是唯一的

(4)rowid是18位大小寫加數字混雜體,唯一表代該條記錄在DBF文件中的位置

(5)rowid可以參與=/like比較時,用""單引號將rowid的值包起來,且區分大小寫

(6)rowid是聯繫表與DBF文件的橋樑

索引特點

索引的特點

(1)索引一旦建立,** Oracle管理系統會對其進行自動維護**, 而且由Oracle管理系統決定何時使用索引

(2)用戶不用在查詢語句中指定使用哪個索引

(3)在定義primary key或unique約束後系統自動在相應的列上創建索引

(4)用戶也能按自己的需求,對指定單個欄位或多個欄位,添加索引

需要注意的是:Oracle是自動幫我們管理索引的,並且如果我們指定了primary key或者unique約束,系統會自動在對應的列上創建索引..

什麼時候【要】創建索引

(1)表經常進行 SELECT 操作

(2)表很大(記錄超多),記錄內容分布範圍很廣

(3)列名經常在 WHERE 子句或連接條件中出現

什麼時候【不要】創建索引

(1)表經常進行 INSERT/UPDATE/DELETE 操作

(2)表很小(記錄超少)

(3)列名不經常作為連接條件或出現在 WHERE 子句中

許可權與用戶


這裡寫圖片描述

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java3y 的精彩文章:

TAG:Java3y |