回來之後錄了幾集視頻,開始錄得時候還不知道怎麼錄,錄了幾集就沒什麼了,每一集十幾分鐘錄得不好了可以重新錄,過程中也也把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.負載均衡
一個小小的監聽器具有均衡客戶端連接的作用,如果有一個實例的連接數量非常的多,那麼監聽器會自動將多一部分連接轉移到其它實例上面。