Oracle數(shù)據(jù)庫與MySQL數(shù)據(jù)庫總結(jié)
? ? ? ? 數(shù)據(jù)庫(DataBase)就是數(shù)據(jù)(Data)的集合驱显,數(shù)據(jù)就是描述事物的符號拆祈,用戶可以通過這個集合進(jìn)行增、刪究飞、改置谦、查等操作,且可共享,并與應(yīng)用程序獨立的數(shù)據(jù)集合
????常見名詞:
????????數(shù)據(jù)庫管理系統(tǒng)(DBMS)
????????數(shù)據(jù)庫應(yīng)用程序(DBAS)
????????數(shù)據(jù)庫管理員(DBA)
完整的數(shù)據(jù)庫包括:1.數(shù)據(jù)庫? ? 2.數(shù)據(jù)庫管理系統(tǒng)
表之間的關(guān)系:
????????一對多:處理數(shù)據(jù)冗余,把外鍵添加到多方亿傅,再引用關(guān)聯(lián)到一方的主鍵
????????一對一:特殊的一對多媒峡,外鍵可以在任意一方,只需把外鍵加上唯一約束
????????多對多:可以看成兩個一對多
Mysql與Oracle主要區(qū)別
????實例區(qū)別:
????????MySQL是輕量級數(shù)據(jù)庫袱蜡,開源免費丝蹭,Oracle是收費的而且價格非常高
????????MySQL一個實例可以操作多個庫,而Oracle一個實例只能對應(yīng)一個庫
????????MySQL安裝安后300M而Oracle有3G左右
????操作區(qū)別:
????????主鍵:MySQL一般使用自動增長類型坪蚁,而Oracle則需要使用序列對象
????????單引號的處理:MySQL里可以用雙引號包起字符串,Oracle里只可以用單引號包起字符串
????????分頁的SQL語句:MySQL用limit,而Oracle需要使用內(nèi)建視圖和rownum偽列
????事務(wù)處理:
????????MySQL默認(rèn)是自動提交镜沽,可以通過 start transaction語句來開始執(zhí)行事務(wù)
Commit提交? rollback 回滾 來手工確認(rèn)對事務(wù)的處理
????????而Oracle默認(rèn)不自動提交敏晤,需要用戶TCL語言進(jìn)行事務(wù)提交
????????MySQL不支持檢查約束
Oracle的數(shù)據(jù)類型
MySQL中沒有varchar2類型
SQL語言約束的作用
Oracle中的約束類型
MySQL中沒有檢查約束類型
SQL語言的分類
Oracle與MySQL中的增、刪缅茉、改嘴脾、查、基本語句都是相同的
? ??1.DQL(數(shù)據(jù)查詢語言)select語句
????????a.基本查詢
????????b.帶條件的查詢(精確查找,模糊查找,范圍查找...)
????????c.連接查詢(等值連接,非等值連接,外連接:左外連接,右外連接,全外連接,自然連接,交叉
連接,內(nèi)連接,自然連接...)
????????d.排序:order by
????????e.分組:group by
????????f.函數(shù)(單行函數(shù)/多行函數(shù)/(又稱為組函數(shù)..))
????????g.子查詢
????2.DML(數(shù)據(jù)操作語言)
????????新增:insert語言
????????修改:update語句
????????刪除:delete語句
????3.DDL語句(數(shù)據(jù)定義語言)
????????創(chuàng)建:create語句
????????修改:alter語句
????????刪除:drop語句
????4.TCL(數(shù)據(jù)事務(wù)控制語言)
????????提交事務(wù):commint語句
????????回滾事務(wù):rollback語句
????5.DCL(數(shù)據(jù)控制語言)
????????授權(quán):grant語句
????????撤銷:revoke語句
Oracle數(shù)據(jù)庫默認(rèn)端口號:1521蔬墩,MySQL默認(rèn)端口為:3306
????select選擇語句:列選擇译打;(投影操作)
????基本查詢語句:
????????seclect +列名1,列名2...? from +表名拇颅;
????????改表名:select +舊表名 as +新表名奏司,(可操作多個表) from +來自哪個表中;
????????escape:轉(zhuǎn)義字符樟插,跟在like后面 'XX\_' escape '\'韵洋;告訴查詢語句,當(dāng)前的'\'為轉(zhuǎn)移字
????????符,后面跟的為具體的字符竿刁,轉(zhuǎn)移符號可以是任意的
????????not:取反
????????邏輯條件:and or not
????????排序:order by 列名 [asc/desc]
????????查哪些數(shù)據(jù),來自哪個表
????????行選擇:(選擇操作)
????????連接:(多表操作)
????????包含空值的算術(shù)表達(dá)式結(jié)算結(jié)果為空
什么是函數(shù):
????????函數(shù)是數(shù)據(jù)庫中提供的能夠處理查詢結(jié)果的方法
函數(shù)的作用:
????????1.執(zhí)行數(shù)據(jù)結(jié)算
????????2.修改單個數(shù)據(jù)項
????????3.格式化顯示日期和數(shù)字(本地語言環(huán)境)
????????4.轉(zhuǎn)換列數(shù)據(jù)類型
????????5.函數(shù)有輸入?yún)?shù),并且總有一個返回值
單行函數(shù):僅對單行做出運(yùn)算搪缨,并且每行返回一個結(jié)果
單行函數(shù)包括
? ??????字符函數(shù):接收字符輸入食拜,可以返回字符或數(shù)字之
? ??????數(shù)字函數(shù):接收數(shù)字輸入,返回數(shù)字值
? ??????日期函數(shù):輸入日期副编,轉(zhuǎn)換為字符串
轉(zhuǎn)換函數(shù):從一個數(shù)據(jù)類型到另一個數(shù)據(jù)類型轉(zhuǎn)換一個值
通用函數(shù):
????????多行函數(shù)(聚合函數(shù)):可以操縱成組的行,每個行組給出一個結(jié)果负甸,也被稱為組函數(shù)
????????轉(zhuǎn)換函數(shù):(數(shù)據(jù)類型的轉(zhuǎn)換:包含隱式轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換)
????隱式轉(zhuǎn)換(不推薦)
????????select '1'+1 from dual
????????select '1'||1 from dual
????強(qiáng)制轉(zhuǎn)換:使用轉(zhuǎn)換函數(shù)對類型進(jìn)行強(qiáng)制轉(zhuǎn)換
????????to_char(num,format):num代表等待轉(zhuǎn)換的數(shù)字,format:代表需要轉(zhuǎn)換的格式
????????-9:代表一位數(shù)字(占位符號)
????????-0:代表一位數(shù)字,如果該位沒有則強(qiáng)制顯示0,小數(shù)點后面的也會強(qiáng)制顯示
????????-$:代表美元符號
????????-L:代表本地貨幣符號
????????-.:代表小數(shù)點
????????-,:代表千分位符號
????????to_char(date,format):將日期轉(zhuǎn)換為字符串
????????to_date(char,'fomat_model'):可以將字符串轉(zhuǎn)換為日期類型
????????to_number:將字符轉(zhuǎn)換為數(shù)字
函數(shù)嵌套:
????????單行函數(shù)能夠被嵌套任意層次,嵌套函數(shù)的計算是從最里層到最外層
????NVL(exp1,exp2)函數(shù):轉(zhuǎn)換一個空值到一個實際的值
????exp1,exp2:可用的數(shù)據(jù)類型可以是日期痹届、字符和數(shù)字,兩個參數(shù)的數(shù)據(jù)類型必須匹配
????exp1:是包含控制的源值或者表達(dá)式
????exp2:是用于轉(zhuǎn)換控制的目的值
????NVL2(exp1,exp2,exp3)函數(shù):NVL函數(shù)檢查第一個表達(dá)式,如果第一個表達(dá)式不為空,那么NVL2函數(shù)返回第二個表達(dá)式;如果第一個表達(dá)式為空,那么第三個表達(dá)式返回
????exp1:是可能包含空的源值或表達(dá)式
????exp2:當(dāng)exp1非空時的返回值
????exp3:當(dāng)exp1為空時的返回值
? ??多表連接查詢:主要解決目標(biāo)數(shù)據(jù)分布在不同的表中(如果目標(biāo)數(shù)據(jù)不在同一張表,可以通過多表連接查詢來解決)
????????笛卡爾乘積(總記錄數(shù)=A表的總記錄*B表的總記錄數(shù)),會出現(xiàn)大量的冗余數(shù)據(jù)........可以使用添加where子語句限制查詢結(jié)果 從而避免笛卡爾乘積
????????多表查詢的語法: select 表名1呻待,列名1,表名2短纵,列名2 ...from 表名1带污,表名2...where子語句
????????實現(xiàn)思路:先確定需要查詢的列分布在哪些表中,再確定表之間的關(guān)聯(lián)關(guān)系(主外鍵關(guān)聯(lián)關(guān)系)
????多表查詢包括等值查詢和非等值查詢
????一個用戶查詢請求涉及到多個表的時候,連接兩個表的條件為=時香到,就是等值連接查詢鱼冀;其他的運(yùn)算符連接的就是非等值查詢。
????????自連接:表自身連接自身(代表父子關(guān)系/遞歸關(guān)系)
????????外連接:外連接是指查詢出符合連接條件的數(shù)據(jù)同時還包含孤兒數(shù)據(jù)
????????孤兒數(shù)據(jù):孤兒數(shù)據(jù)是指被連接的列的值為空的數(shù)據(jù)
????????左外(left [out] join):包含左表的孤兒數(shù)據(jù)(兩種表分別是A表和B表相關(guān)聯(lián),使用左外連接查詢以"左表為主"悠就,左邊的表記錄全部展現(xiàn),右邊的只展示與左邊相關(guān)聯(lián)的數(shù)據(jù))
????????右外(right [out] join):包含右表的孤兒數(shù)據(jù)(兩種表分別是A表和B表相關(guān)聯(lián),使用右外連接查詢以"右表為主"千绪,右邊的表記錄將全部展現(xiàn),左邊只展示與右邊相關(guān)聯(lián)的數(shù)據(jù))
????????全外(full [out] join):包含兩個表中的孤兒數(shù)據(jù)(關(guān)聯(lián)的兩張表中的所有數(shù)據(jù)均會出現(xiàn))
????內(nèi)連接取交集,外連接分左和右梗脾,左連接左邊的全取荸型,右連接右邊的全取
????????內(nèi)連接? inner join (join)
????????交叉連接? cross join? 笛卡爾積 效率低
????????外連接? outer join? (left join ,right join ,full join)
????????沒有約束條件(沒有where。炸茧。)時候瑞妇,inner join 和 cross join 結(jié)果集一樣
????????組函數(shù)/統(tǒng)計函數(shù)/多行函數(shù)/聚合函數(shù)
????????max(列名):求最大值
????????min(列名):求最小值
????????sum(列名):求和
????????avg(列名):求平均值
????????count(*):計算總數(shù)
????????count(expr):返回在列中有expr指定的非控制的總數(shù)
????????count(distinct expr):去重,在expr指定的列
????????count(列名):會忽略空值,count(*):不忽略空值
????????單行函數(shù)對查詢到每個結(jié)果集做處理,而組函數(shù)只對分組數(shù)據(jù)做處理單行函數(shù)對每個結(jié)果集返回一個結(jié)果梭冠,而組函數(shù)對每個分組返回一個結(jié)果
????????avg和sum函數(shù)參數(shù)類型只能是數(shù)字
????????count/max/min參數(shù)類型可以是日期辕狰,字符和數(shù)字
????????組函數(shù)會默認(rèn)忽略控制,可以在組函數(shù)中使用nvl來處理空值
????????group:查詢分組的作用,顯示每列不同組的數(shù)據(jù)
????????group by 列名1,列名2...
????????HAVING子語句:在分組函數(shù)中添加篩選條件
????????where子語句不允許在分組函數(shù)作為條件直接使用
????????子查詢是一個select語句,他是嵌套在另一個select語句中的子句(把一個查詢語句的結(jié)果當(dāng)作條件查詢)
????????1.子查詢語句必須用括號括起來(區(qū)分優(yōu)先級)且在主查詢之前執(zhí)行一次
????????2.若需要放在比較中,子查詢放在比較條件的右邊
????????3.子查詢的結(jié)果被用于主查詢
????????單行子查詢:子查詢語句只返回一行的查詢(使用單行比較符)
????????多行子查詢:子查詢語句返回多行的查詢(使用多行比較符)
????新增語句:insert into 表名[列名1,列名2...] values(值1,值2..)
????????修改語句:
????????1.update 表名 set 列名1=值1,列名2=值2...where子句
????????2.update 表明 set 列名 = (子查詢語句) where子句
????????刪除語句:delete [from] 表名 where子句---->刪除哪列或者表全刪除
????????事務(wù):(不可分割的邏輯執(zhí)行單元,要么全部成功,要么全部失敗)指作為單個邏輯工作單元執(zhí)行的一系列操作,要么完全的執(zhí)行,要么完全的不執(zhí)行,事務(wù)主要是對DML語言進(jìn)行控制
????事務(wù)特性:
????????1.原子性????2.一致性????3.隔離性????4.持久性
????????事務(wù)提交:commit? 事務(wù)的回滾: rollback
????創(chuàng)建表:create table
????????視圖是基于一個表或另一個視圖的邏輯表,一個視圖并不包含它自己的數(shù)據(jù)控漠,像一個窗口蔓倍,數(shù)據(jù)保存在"基"表
視圖的優(yōu)點
????????1.限制數(shù)據(jù)的訪問,選擇顯示"基表"中的列
????????2.視圖通過簡單的查詢返回復(fù)雜的結(jié)果
????????3.視圖針對特別的用戶和應(yīng)用程序提供數(shù)據(jù)獨立性
????簡單視圖:數(shù)據(jù)來自一個表,不包含函數(shù)或數(shù)據(jù)分組,能通過視圖執(zhí)行DML操作
????復(fù)雜視圖:數(shù)據(jù)來自多個表,包含函數(shù)或數(shù)據(jù)分組,不允許通過視圖進(jìn)行DML操作
????視圖本身是一張邏輯表(虛擬表),可以進(jìn)行DML操作
????創(chuàng)建視圖 create view 視圖名 as select語句
????只讀視圖: 添加 with read only
????也可以通過可視化操作創(chuàng)建視圖
????刪除視圖:drop view 視圖名
????內(nèi)建視圖
????????內(nèi)建視圖由位于From子句中命名了別名的子查詢創(chuàng)建(將一個查詢語句的結(jié)果看作一張?zhí)摂M的表/視圖,可以和其他表進(jìn)行連接查詢或執(zhí)行子查詢)
????TOP—N 查詢:查詢排名
????Rownum:偽列(行號):每個表都有默認(rèn)的連續(xù)偽列值
Oracle分頁查詢的實現(xiàn)思路:在內(nèi)建視圖中通過rownum偽列的值來判斷指定獲取數(shù)據(jù)的數(shù)量
????分頁單位:每頁展示數(shù)據(jù)的條數(shù)????當(dāng)前頁:展示的第幾頁
Oracle分頁語句規(guī)律(反人類的Oracle):
?????????select????t1.*????from (select????t.*,rownum????rn????from? ??表名????t????where????rowunum????<=????分頁單位*當(dāng)前頁) t1????where????t1.rn????>=????(當(dāng)前頁-1)*分頁單位????and????t1.rn????<=????分頁單位*當(dāng)前頁序列
MySQL中的分頁語句規(guī)律實現(xiàn)思路: 使用limit關(guān)鍵字實現(xiàn)分頁
MySQL中沒有序列
? ? Oracle數(shù)據(jù)庫中序列是用戶創(chuàng)建的數(shù)據(jù)庫對象,序列會產(chǎn)生唯一的整數(shù)。序列的一個典型用途是創(chuàng)建一個主鍵的值,它對于每一行必須是唯一的
????????創(chuàng)建語法:使用 create sequence 序列名,默認(rèn)緩存為20
????????特點1:默認(rèn)沒有值特點????2:序列名.nextval每執(zhí)行自增1特點????3:序列名.currval查看當(dāng)前序列的值
????????作用:作為主鍵使用
????????可以創(chuàng)建自定義序列且設(shè)置序列開始位置以及自增值
????????create sequence aa? --創(chuàng)建序列????start with 5 --起始位置? ? increment by 2 --設(shè)置自增
????????刪除序列:drop sequence 序列名
????????索引:類似于目錄,作用:提升查詢效率,但是對增/刪/改效率有影響
????????索引分類:唯一索引/非唯一索引
????????唯一索引:當(dāng)前在指定的裂傷添加了主鍵約束或唯一約束時,該列自動添加了唯一索引
????????非唯一索引:單行索引,復(fù)合索引(組合索引),函數(shù)索引
????命名語法:create index 索引名 on 表名(列名)
????????特點:顯示的創(chuàng)建,隱式的執(zhí)行????注意:oracle會自動給表的主鍵創(chuàng)建索引
刪除索引:drop index 索引名
????三大范式
????????第一范式:保證列的原子性(字段不能再分)
????????第二范式:限制多對多(不存在局部依賴)
????????第三范式:限制一對多(不含傳遞依賴)
????????優(yōu)點:結(jié)構(gòu)合理盐捷,冗余較小偶翅,盡量避免插入刪除修改異常????缺點:性能降低,多表查詢比單表查詢速度慢
????????數(shù)據(jù)庫的設(shè)計應(yīng)該根據(jù)當(dāng)前情況和需求做出靈活的處理
????????特定表的設(shè)計可以違反第三范式碉渡,增加冗余提高性能
SQL語言執(zhí)行順序:select? ? ---> from? ? --->where? ? --->? ??group by? ? ---> having? ??---> order by