數(shù)據(jù)庫(kù)總結(jié)

? ? ?由于最近要參加面試,不得不把雪藏很久的數(shù)據(jù)庫(kù)知識(shí)拿出來翻一翻,我想吧,數(shù)據(jù)庫(kù)作為一個(gè)基礎(chǔ)也是核心的技能是每一個(gè)程序員都要會(huì)使用的衣形,因?yàn)槲沂且粋€(gè)剛?cè)肟拥男〕绦蛟骋幻叮窒淼臇|西只是數(shù)據(jù)庫(kù)知識(shí)中的毛皮姿鸿,望大牛勿噴谆吴,



1) 數(shù)據(jù)庫(kù)的顯示、創(chuàng)建苛预、刪除

顯示數(shù)據(jù)庫(kù):show database;

創(chuàng)建數(shù)據(jù)庫(kù):CREATE DATABASE DBNAME ;

刪除數(shù)據(jù)庫(kù):DROP DATABASE DBNAME ;

選中數(shù)據(jù)庫(kù):USE DBNAME ;

DBNAME:數(shù)據(jù)庫(kù)名

TABLENAME:數(shù)據(jù)庫(kù)表名


2) 數(shù)據(jù)表的顯示句狼、創(chuàng)建、刪除

顯示數(shù)據(jù)表:SHOW TABLE TABLENAME ? ?(注明:操作此語(yǔ)句前首先必須得選擇數(shù)據(jù)庫(kù))

顯示表結(jié)構(gòu):DESC TABLENAME 或者 ?DESCRIBE TABLENAME ;

創(chuàng)建數(shù)據(jù)表:CREATE TABLE TABLENAME(字段設(shè)定表的列)

刪除數(shù)據(jù)表:DELETE FROM TABLENAME ;

清除數(shù)據(jù)表中的數(shù)據(jù):

DELETE FROM TABLENAME ?或者 ? ?TRUNCATE TABLE TABLENAME

注明:不帶WHERE參數(shù)的DELETE語(yǔ)句可以刪除表中所有內(nèi)容热某,使用TRUNCATA TABLE 也可以清除表中所有數(shù)據(jù)

從效率上來講 TRUNCATE 要比DELETE 快腻菇,但 TRUNCATE 刪除后不記錄日志并不可恢復(fù)數(shù)據(jù)。

添加數(shù)據(jù)表中的數(shù)據(jù):

INSERT INTO TABLENAME (列1,列2,列3) VALUES(值1,值2,值3);

添加數(shù)據(jù)表中的主鍵:

ALTER TABLE TABLENAME() ADD PRIMARY KEY (主鍵列名);

刪除數(shù)據(jù)表中的主鍵:

ALTER TABLE TABLENAME DROP PRIMARY KEY (主鍵列名);


創(chuàng)建索引:

CREATE [UNIQUE] INDEX IDXNAME ON TABLENAME(列名);

刪除索引:

DROP INDEX IDXNAME;

注明:索引是不可更改的昔馋,想更改必須刪除索引重新建筹吐。


索引:

索引是以表列為基礎(chǔ)的數(shù)據(jù)庫(kù)對(duì)象,保存著表中排序的索引列秘遏,并記錄了索引列在數(shù)據(jù)表中的物理存儲(chǔ)位置實(shí)現(xiàn)了表中數(shù)據(jù)的邏輯排序丘薛。

索引的作用:

1. 通過創(chuàng)建唯一性索引可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性。

2. 創(chuàng)建索引可以大大加快數(shù)據(jù)的索引速度邦危,這是創(chuàng)建索引的最重要的原因洋侨。

3. 可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義倦蚪。

4. 在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí)凰兑,同樣可以減少查詢中分組和排序的時(shí)間。

5. 在查詢過程中使用優(yōu)化隱藏器审丘,提高系統(tǒng)的性能。

索引的缺點(diǎn):

1. 創(chuàng)建索引和維護(hù)索引需要耗費(fèi)時(shí)間勾给,并隨著數(shù)據(jù)量的增加而增加滩报。

2. 索引需要占用物理空間锅知,每一個(gè)索引需要占用一定的物理空間,如果建立聚簇索引那么需要的空間更大脓钾。

3. 當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增刪改查時(shí)售睹,索引也需要?jiǎng)討B(tài)維護(hù),那么就降低了數(shù)據(jù)的維護(hù)速度可训。


創(chuàng)建視圖:

CREATE VIEW VIEWNAME AS SELECT (SQL語(yǔ)句);

刪除視圖:

DROP VIEW VIEWNAME;

視圖:

視圖是一種數(shù)據(jù)庫(kù)對(duì)象昌妹,它是一個(gè)虛擬表,并不代表任何我物理數(shù)據(jù)握截,只是用來查看數(shù)據(jù)的窗口飞崖。

視圖的優(yōu)點(diǎn)

1. 數(shù)據(jù)的安全性,通過定義不同的視圖使用戶只能看到與自己有關(guān)的數(shù)據(jù)谨胞。

2. 查詢簡(jiǎn)單化固歪,將復(fù)雜的查詢語(yǔ)句建立成一個(gè)視圖,可以使用戶只針對(duì)視圖進(jìn)行查詢胯努。

3. 邏輯數(shù)據(jù)獨(dú)立性牢裳,當(dāng)構(gòu)成視圖的基本表需要修改時(shí),只需要修改視圖中的子查詢部分叶沛,而基于視圖的部分不需要改變蒲讯。

視圖的缺點(diǎn):

1. 性能,需要耗費(fèi)一定時(shí)間灰署。

2. 修改限制判帮,有 UNIQUE 等集合操作符的視圖、有 GROUP BY 子句的視圖氓侧、有 AVG/SUM/MAX等聚合函數(shù)時(shí)脊另、使用 DISTINCT 關(guān)鍵字的視圖、連接表的視圖都是不可修改的约巷。

3. 創(chuàng)建限制偎痛, 視圖查詢語(yǔ)句不能含有 ORDER BY 、 COMPURER 独郎、COMPURER BY 踩麦、INFO 關(guān)鍵字。

基本查詢語(yǔ)句:

選擇查詢:SELECT * FROM TABLE WHERE 值;

更新操作:UPDATA TABLENAME SET 原值 ?= 現(xiàn)值

排序操作:SELECT * FROM TABLENAME ORDER BY 列名 DESC;

分頁(yè)查詢操作:

oracle: SELECT * FROM(SELECT A.*, ROWNUM RN FROM(SELECT * FROM TABLENAME) A) WHERE RN BETWEEN 范圍1 AND 范圍2

MySQL : SELECT * FROM TABLE (查詢條件) ORDER BY ID LIMIT ?,?;


存儲(chǔ)過程:

存儲(chǔ)過程是一組為完整特定功能的SQL語(yǔ)句集氓癌,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中谓谦,用戶通過指定存儲(chǔ)過程的名字給出參數(shù)來執(zhí)行它。

存儲(chǔ)過程優(yōu)點(diǎn):

1. 存儲(chǔ)過程只在創(chuàng)造時(shí)進(jìn)行編譯贪婉,并通過了語(yǔ)法檢查和性能優(yōu)化反粥,一次編譯多次執(zhí)行,使用存儲(chǔ)過程可以提高數(shù)據(jù)庫(kù)的執(zhí)行速度。

2. 允許組件式編程才顿,存儲(chǔ)過程可以設(shè)置參數(shù)莫湘,可以根據(jù)傳入?yún)?shù)的不同重復(fù)使用同一個(gè)存儲(chǔ)過程,從而提高代碼的優(yōu)化率和可讀性

3. 減少網(wǎng)絡(luò)流量

4. 提高系統(tǒng)安全性郑气,建立特定的存儲(chǔ)過程避免非授權(quán)用戶對(duì)數(shù)據(jù)的訪問幅垮,包中數(shù)據(jù)的安全。

存儲(chǔ)過程的缺點(diǎn):

1. 移植性差尾组,依賴數(shù)據(jù)庫(kù)廠商忙芒,難以移植。

2. 難以試調(diào)讳侨、維護(hù)呵萨,當(dāng)業(yè)務(wù)邏輯大的時(shí)候封裝性不夠,難以試調(diào)維護(hù)爷耀。

3. 服務(wù)器不能負(fù)載均衡甘桑,復(fù)雜的應(yīng)用程序在存儲(chǔ)過程中實(shí)現(xiàn)業(yè)務(wù)邏輯的負(fù)擔(dān)在數(shù)據(jù)庫(kù)服務(wù)器上,沒有增加負(fù)載歹叮、

存儲(chǔ)過程分類:

1. 系統(tǒng)存儲(chǔ)過程

2. 本地存儲(chǔ)過程

3. 臨時(shí)存儲(chǔ)過程

4. 遠(yuǎn)程存儲(chǔ)過程

5. 擴(kuò)展存儲(chǔ)過程


事物:

事物是單個(gè)的工作單元跑杭,

事物的屬性:

1. 原子性,事物必須是原子工作單元咆耿,對(duì)其數(shù)據(jù)修改德谅,要么全都執(zhí)行,要么全部不執(zhí)行萨螺。

2. 一致性窄做,事物在完成時(shí)必須使所有的數(shù)據(jù)都保持一致,在相關(guān)的數(shù)據(jù)庫(kù)中所有額規(guī)則必須應(yīng)用于事物的修改慰技,確保數(shù)據(jù) 完整性椭盏,事物結(jié)束時(shí)數(shù)據(jù)必須是爭(zhēng)取的。

3. 隔離性吻商,由并發(fā)是事物所做的修改必須與任何其他并發(fā)事物所做的修改隔離掏颊。

4. 持久性,事物完成之后對(duì)系統(tǒng)的影響是永久性的艾帐。

事物的分類:

1. 顯示事物乌叶,

2. 隱性事物,

3. 自動(dòng)提交事物

觸發(fā)器:觸發(fā)器是特定時(shí)間出現(xiàn)時(shí)自動(dòng)執(zhí)行的存儲(chǔ)過程


觸發(fā)器的功能

1.自動(dòng)生成數(shù)據(jù)

2.自定義復(fù)雜的安全權(quán)限

3.提供審計(jì)和日志記錄

4.啟用復(fù)雜的業(yè)務(wù)邏輯


SQL語(yǔ)句執(zhí)行的過程

1.客戶端把語(yǔ)句發(fā)送給服務(wù)器端執(zhí)行

2.服務(wù)器端對(duì)語(yǔ)句進(jìn)行語(yǔ)句解析柒爸,

查詢高速緩存准浴,服務(wù)器端先查找高速緩存區(qū),如果高速緩存區(qū)存在這個(gè)SQL語(yǔ)句則直接執(zhí)行這個(gè)SQL語(yǔ)句捎稚。

語(yǔ)句合法性檢查乐横,高速緩存區(qū)未能查到這個(gè)SQL語(yǔ)句則服務(wù)器進(jìn)程就會(huì)對(duì)這個(gè)SQL語(yǔ)句進(jìn)行合法性檢查求橄,如果不符合規(guī)則,則把錯(cuò)誤信息反饋給客戶端晰奖,在合法性檢查中谈撒,不會(huì)對(duì)SQL語(yǔ)句中包含的表名、列名進(jìn)行查詢匾南。

語(yǔ)義檢查,若SQL語(yǔ)句符合合法性蛔外,則服務(wù)器端進(jìn)程會(huì)對(duì)語(yǔ)句中的字段蛆楞、表內(nèi)容進(jìn)行檢查,

獲取對(duì)象解析鎖夹厌,當(dāng)語(yǔ)法語(yǔ)義都通過檢查后豹爹,系統(tǒng)會(huì)對(duì)查詢的對(duì)象加鎖,保證數(shù)據(jù)的一致性矛纹,防止在查詢過程中其他用戶對(duì)這個(gè)對(duì)象結(jié)構(gòu)發(fā)生改變

數(shù)據(jù)訪問權(quán)的核對(duì)臂聋,當(dāng)語(yǔ)法、語(yǔ)義都通過后服務(wù)器端進(jìn)程檢查所連接的用戶是否有訪問權(quán)或南。

確定最佳執(zhí)行計(jì)劃孩等,當(dāng)簽名條件都符合之后,服務(wù)器進(jìn)程會(huì)根據(jù)一定的規(guī)則對(duì)SQL語(yǔ)句進(jìn)行優(yōu)化采够,確定最佳執(zhí)行計(jì)劃之后將這條SQL語(yǔ)句存儲(chǔ)到數(shù)據(jù)高速緩存區(qū)肄方,如果下次遇到這個(gè)語(yǔ)句時(shí)就會(huì)忽略語(yǔ)法語(yǔ)義權(quán)限檢查的步驟,而直接執(zhí)行SQL語(yǔ)句蹬癌,提高SQL語(yǔ)句的處理效率

3 .語(yǔ)句的執(zhí)行

若選擇的數(shù)據(jù)塊已經(jīng)被讀取到數(shù)據(jù)緩存區(qū)中权她,服務(wù)器進(jìn)程直接會(huì)把這個(gè)數(shù)據(jù)傳遞到客戶端,不需要再去數(shù)據(jù)庫(kù)文件中查詢數(shù)據(jù)逝薪。

若數(shù)據(jù)不再緩沖區(qū)隅要,服務(wù)器進(jìn)程將從數(shù)據(jù)庫(kù)文件中查詢相關(guān)數(shù)據(jù),并吧這些數(shù)據(jù)放入數(shù)據(jù)緩存區(qū)中董济。

4.提取數(shù)據(jù)


SQL語(yǔ)句中函數(shù) 步清、 關(guān)鍵字 、 排序等執(zhí)行順序:

from子句返回處理結(jié)果集

where子句排除不滿足搜索條件的行

group by 子句將選定的行到group by 子句中各個(gè)唯一值的組中

選擇列表中指定的聚合函數(shù)可以計(jì)算各組的匯總值

having子句排除不滿足搜索條件的行

計(jì)算所有的表達(dá)式

使用order by 對(duì)結(jié)果集進(jìn)行排序

查找你搜索的字段

SQL優(yōu)化:

select中避免 *

減少訪問數(shù)據(jù)庫(kù)的次數(shù)

用where子句替換having子句

通過內(nèi)部函數(shù)提高SQL效率

使用表的別名

用exists 代替in 感局、 用not exists代替 not in

盡量多使用commit

刪除重復(fù)記錄

整合簡(jiǎn)單無(wú)關(guān)聯(lián)的數(shù)據(jù)庫(kù)

用truncate 替代delete


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尼啡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子询微,更是在濱河造成了極大的恐慌崖瞭,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撑毛,死亡現(xiàn)場(chǎng)離奇詭異书聚,居然都是意外死亡唧领,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門雌续,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斩个,“玉大人,你說我怎么就攤上這事驯杜∈苌叮” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鸽心,是天一觀的道長(zhǎng)滚局。 經(jīng)常有香客問我,道長(zhǎng)顽频,這世上最難降的妖魔是什么藤肢? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮糯景,結(jié)果婚禮上嘁圈,老公的妹妹穿的比我還像新娘。我一直安慰自己蟀淮,他們只是感情好最住,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灭贷,像睡著了一般温学。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甚疟,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天仗岖,我揣著相機(jī)與錄音,去河邊找鬼览妖。 笑死轧拄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讽膏。 我是一名探鬼主播檩电,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼府树!你這毒婦竟也來了俐末?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奄侠,失蹤者是張志新(化名)和其女友劉穎卓箫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垄潮,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烹卒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年闷盔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旅急。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逢勾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藐吮,到底是詐尸還是另有隱情溺拱,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布谣辞,位于F島的核電站盟迟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏潦闲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一迫皱、第九天 我趴在偏房一處隱蔽的房頂上張望歉闰。 院中可真熱鬧,春花似錦卓起、人聲如沸和敬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)昼弟。三九已至,卻和暖如春奕筐,著一層夾襖步出監(jiān)牢的瞬間舱痘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工离赫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芭逝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓渊胸,卻偏偏與公主長(zhǎng)得像旬盯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翎猛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容