程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle回顧

Oracle回顧

編輯:Oracle教程

Oracle回顧


回來之後錄了幾集視頻,開始錄得時候還不知道怎麼錄,錄了幾集就沒什麼了,每一集十幾分鐘錄得不好了可以重新錄,過程中也也把Oracle數據庫這部分看了一遍,收獲也挺多的,學習是重復積累的過程,對於一些零散的知識點又回顧了一下,重新復習一遍其中有些已經學過,有些僅僅是有一點點印象,記得有一句話叫做“一本書只要其中有一句話對你很有幫助,那麼它是有價值的”,看完這個視頻也學習和加深了一些知識的離家,並總結如下,大家可以作為參考。

數據庫理解

計算機就如同我們的身體各個部分,數據庫=大腦,五官=編程語言,血液=數據總線,操作系統=人體。

在大腦裡面存儲著各種信息,通過我們的眼、耳等五官輸入到我們的大腦裡面,因此五官就像我們平時使用的各種編程語言,而操作系統就好比我們的身體支撐著我們個個部分的結構完整,保證它們能夠正確運行,計算機和我們的身體是一樣的,大同小異,畢竟是人發明了電腦。

Oracle用戶

超級管理員sys/chage_on_install

普通管理員system/manage

普通用戶scott/triger

Oracle中的函數

單行函數

字符函數

substr(),截取字符串

數字函數

round()隨機函數

mod()取摸函數

日期函數

Sysdate()取得當前日期

對於日期,加減一個數,等於若干天之後或之前的一個日期

轉換函數

to_char(),To_char('12345678'.'999,999')

to_date(),例如To_date(SYSDATE,'yyyy-mm-dd')

通用函數

NVL(),將一個null的字段值變為0,例如select NVL(name,0) from table1 ,如果name為null時,將輸出0而不是null

decode(),判斷一個字段等於多少,然後,輸出多少,例如上面name=1.輸出張三;name=2輸入李四

多表查詢

一般超過兩個表一起查詢就會差生笛卡爾積的現象,查詢出來的結果為兩個表的記錄數乘機,我們需要利用等值條件消除笛卡爾積,只是查詢出來的結果進行了消除,但是從本質上看並沒有消除,還是有笛卡爾積的現象,因此,並不建議使用多表查詢,多表查詢影響查詢效率,尤其是在多表大數據查詢時更不建議使用聯合查詢,

在真正的大數據系統中 通常在查詢數據之前,需要先看一下裡面有多少數據,只查詢出自己想要的數據即可。

分組查詢

對於復雜的SQL語句需要自己多練習才可以靈活掌握,並想它們之間的關系和每個SQL語句的作用,隨著使用的加深會對每個SQL語法理解更深刻,如果再出現類似的查詢會出現的思路變多。

查詢時PS:

1. 通常子查詢寫在from或where關鍵字之後;作用是形成新的表和結果集,可以從新的結果集中查詢或得到條件。

2.where條件在group by之前執行,即先進行條件過濾,把過濾後的結果按照某一個字段進行分組。

3.如果分組之後還需要對結果進行過濾,那麼就得使用HAVING字段設置過濾條件了。

4.排序關鍵系ORDER BY在SQL語句的最後執行。

只要記住這幾個原則,再加上多多練習復雜一些的查詢,SQL語句應該是沒有什麼問題的,再難的查詢也不過是這些單詞的拼接和組合。

序列的使用

以前也聽說過序列,但是自己沒用過。因為總覺得很麻煩,所以沒有使用過。這次項目中用到了,而且視頻也講到了,才發現,很簡單很實用。

語法:

CREATE SEQUENCE myseq

INCREMENT BY 1 -- 每次加幾個

START WITH 1 -- 從1開始計數

NOMAXVALUE -- 不設置最大值

NOCYCLE -- 一直累加,不循環

CACHE 10;

使用的時候,例如插入,只用在對應的列賦值myseq.NEXTVAL即可。

例如

INSERT INTO emp VALUES (myseq.nextval, 'LEWIS'); 

事務處理

對於操作數據庫的每一次連接,它是同數據庫建立了一個session,即一個會話這個會話雖然不是web層的會話但同那個會話也很類似,在一個session中對數據庫進行各種操作即是在同一個事務中,這種事物是本地事務,如果是更新操作上一個事物沒有更新完成,下一個事物不能進行提交和操作,因為在更新的時候數據庫會自動枷鎖,知道更新操作完成才會釋放鎖。

數據偽列

指的不是我們設計數據庫的人自己添加的列,而是隱含的列我們可以使用,Oracle中常見的兩個偽列為ROWNUM、ROWID,經常用到的是ROWNUM這個列,ROWID為記錄的物理地址,我們可以利用這一點實現分頁效果,看下面代碼

Select * from(select ROMNUM rm,id whereROMNUM<=10) temwhere tem>5

ROWNUM;每次查詢都變不固定

ROWID:數據記錄的物理地址

閃回技術

從Oracle10g之後的數據庫都提供了閃回技術,相當於一個回收站的功能,刪除的數據或者表什麼的可以從回收站裡面找回來,這個功能在有時候挺實用的,值得我們去了解了解。

簡單命令:

查看回收站裡面內容show recyclebin

找回刪除的表:Flashback table tablename to before drop

清空回收站:Purge recyclebin

約束

非空

一個字段不能為空,not null

唯一性

該約束是對某個具體字段而言,將某個字段設為唯一則該字段不會出現重復記錄,但要記住null是可以的,只要不重復就行。

主鍵

主鍵=非空+唯一性

外鍵

如果一個表的主鍵再另一個表中當做外鍵,那麼這個鍵就是外鍵約束,外鍵和主鍵約束是同時存在的。

檢查

即對一個字段做一些限制,例如性別:在數據庫中限制只能輸入男或女。

聯合查詢

連接兩個表的查詢結果

Union:聯合查詢,相同的部分不顯示

Union all:相同的部分顯示

Intsersect:只顯示相同的部分

Minus:只顯示不同部分

視圖

第一類 on with check option

這種視圖是待查詢條件的視圖,可以更新,但是不能更新查詢條件

第二類 with read only

該視圖為只讀的,不可以對該視圖中的任何一個字段

索引

索引的主要功能就是用於提升數據庫的操作性能。

Select * from table1 where id>10000
i. 上面的語句是逐行進行判斷,沒有加索引
ii. 加索引之後會對加索引的那列,二叉樹排列,如下
1) \
2) 再執行上面語句,只查詢部分記錄
3) 如果某列是主鍵約束,則自動建立索引
4) 手工創建,在某一個列上建立
iii. 這種索引有一個問題,即:如果想要性誰能提高,則必須維持以上的這棵樹,如果數據需要頻繁修改的話,則代碼性能會下降。
iv. 所以,一般索引只使用在不會頻繁修改的表中,而如果一張表上頻繁修改數據切又使用索引,性能會降低,所以,性能提升永遠是相對的。
v. 這種所以是Oracle十幾種索引中的一種,也是最簡單一種稱為:B樹索引。還有位圖索引、函數索引等

數據庫備份

在上線的項目中,數據庫備份是很重要的一個工作。

導入導出

冷備份

先把數據庫停止運行了,再進行備份,類似於熱插拔。

數據庫監聽

1.監聽客戶端連接

監聽為數據庫實例服務,當用戶第一次登陸實例時先通過監聽,再連接,第二次連接就不通過監聽了
b. Oracle開始沒有在window上,後來移植到了window所以,提供監聽了
c. 當安裝到window上之後,適應了些window操作習慣,可以傻瓜登陸,window模式
e. 監聽需要判斷是普通用戶登錄還是sysdba登錄,如果是普通用戶就去數據庫驗證;如果是dba就是密碼文件或操作系統驗證
f. 操作系統驗證
i. 對於DBA,首先是操作系統驗證,所以,不寫密碼或則隨便寫都可以登錄,因為他是操作系統用戶
1) 如果把操作系統認證 取消,則進行密碼文件驗證,再不寫密碼就不行了

2.管理實例

多個數據庫實例可以同時注冊到一個監聽器上,它們把自己的實例名等參數信息在監聽器注冊,當客戶端連接監聽器時就可以通過這些參數來找到數據庫實例,在客戶端與實例之間實現了一個橋梁的作用。

3.負載均衡

一個小小的監聽器具有均衡客戶端連接的作用,如果有一個實例的連接數量非常的多,那麼監聽器會自動將多一部分連接轉移到其它實例上面。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved