1、觸發(fā)器的作用印蔬?
觸發(fā)器是一中特殊的存儲(chǔ)過(guò)程,主要是通過(guò)事件來(lái)觸發(fā)而被執(zhí)行的脱衙。它可以強(qiáng)化約束侥猬,來(lái)維護(hù)數(shù)據(jù)的完整性和一致性例驹,可以跟蹤數(shù)據(jù)庫(kù)內(nèi)的操作從而不允許未經(jīng)許可的更新和變化⊥诉耄可以聯(lián)級(jí)運(yùn)算鹃锈。如,某表上的觸發(fā)器上包含對(duì)另一個(gè)表的數(shù)據(jù)操作瞧预,而該操作又會(huì)導(dǎo)致該表觸發(fā)器被觸發(fā)屎债。
2、什么是存儲(chǔ)過(guò)程垢油?用什么來(lái)調(diào)用盆驹?
存儲(chǔ)過(guò)程是一個(gè)預(yù)編譯的SQL語(yǔ)句,優(yōu)點(diǎn)是允許模塊化的設(shè)計(jì)滩愁,就是說(shuō)只需創(chuàng)建一次躯喇,以后在該程序中就可以調(diào)用多次。如果某次操作需要執(zhí)行多次SQL硝枉,使用存儲(chǔ)過(guò)程比單純SQL語(yǔ)句執(zhí)行要快廉丽。 調(diào)用: 1)可以用一個(gè)命令對(duì)象來(lái)調(diào)用存儲(chǔ)過(guò)程。 2)可以供外部程序調(diào)用妻味,比如:java程序正压。
3、存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn)责球?
優(yōu)點(diǎn): 1)存儲(chǔ)過(guò)程是預(yù)編譯過(guò)的焦履,執(zhí)行效率高。 2)存儲(chǔ)過(guò)程的代碼直接存放于數(shù)據(jù)庫(kù)中棕诵,通過(guò)存儲(chǔ)過(guò)程名直接調(diào)用裁良,減少網(wǎng)絡(luò)通訊。 3)安全性高校套,執(zhí)行存儲(chǔ)過(guò)程需要有一定權(quán)限的用戶(hù)价脾。 4)存儲(chǔ)過(guò)程可以重復(fù)使用,可減少數(shù)據(jù)庫(kù)開(kāi)發(fā)人員的工作量笛匙。 缺點(diǎn):移植性差
4侨把、存儲(chǔ)過(guò)程與函數(shù)的區(qū)別
存儲(chǔ)過(guò)程
1、用于在數(shù)據(jù)庫(kù)中完成特定的操作或者任務(wù)(如插入妹孙、刪除等)
2秋柄、程序頭部聲明用procedure
3、程序頭部聲明時(shí)不需描述返回類(lèi)型可以使用in/out/in out 三種模式的參數(shù)
4蠢正、可作為一個(gè)獨(dú)立的PL/SQL語(yǔ)句來(lái)執(zhí)行
5骇笔、可以通過(guò)out/in out 返回零個(gè)或多個(gè)值
6、SQL語(yǔ)句(DML 或SELECT)中不可調(diào)用存儲(chǔ)過(guò)程
函數(shù)
1、用于特定的數(shù)據(jù)(如選擇)
2笨触、程序頭部聲明用function
3懦傍、程序頭部聲明時(shí)要描述返回類(lèi)型,而且PL/SQL塊中至少要包括一個(gè)有效的return語(yǔ)句
4芦劣、可以使用in/out/in out 三種模式的參數(shù)
5粗俱、不能獨(dú)立執(zhí)行,必須作為表達(dá)式的一部分調(diào)用
6虚吟、通過(guò)return語(yǔ)句返回一個(gè)值寸认,且改值要與聲明部分一致,也可以是通過(guò)out類(lèi)型的參數(shù)帶出的變量
7串慰、SQL語(yǔ)句(DML 或SELECT)中可以調(diào)用函數(shù)
5偏塞、索引的作用?和它的優(yōu)點(diǎn)缺點(diǎn)是什么模庐?
索引就一種特殊的查詢(xún)表烛愧,數(shù)據(jù)庫(kù)的搜索可以利用它加速對(duì)數(shù)據(jù)的檢索油宜。它很類(lèi)似與現(xiàn)實(shí)生活中書(shū)的目錄掂碱,不需要查詢(xún)整本書(shū)內(nèi)容就可以找到想要的數(shù)據(jù)。索引可以是唯一的慎冤,創(chuàng)建索引允許指定單個(gè)列或者是多個(gè)列疼燥。缺點(diǎn)是它減慢了數(shù)據(jù)錄入的速度,同時(shí)也增加了數(shù)據(jù)庫(kù)的尺寸大小蚁堤。
6醉者、什么樣的字段適合建索引
唯一、不為空披诗、經(jīng)常被查詢(xún)的字段
7撬即、索引類(lèi)型有哪些?
邏輯上:
Single column 單行索引
Concatenated 多行索引
Unique 唯一索引
NonUnique 非唯一索引
Function-based 函數(shù)索引
Domain 域索引 物理上:
Partitioned 分區(qū)索引
NonPartitioned 非分區(qū)索引
B-tree :
Normal 正常型B樹(shù)
Rever Key 反轉(zhuǎn)型B樹(shù) Bitmap 位圖索引
8呈队、什么是事務(wù)剥槐?什么是鎖?
事務(wù)就是被綁定在一起作為一個(gè)邏輯工作單元的SQL語(yǔ)句分組宪摧,如果任何一個(gè)語(yǔ)句操作失敗那么整個(gè)操作就被失敗粒竖,以后操作就會(huì)回滾到操作前狀態(tài),或者是上有個(gè)節(jié)點(diǎn)几于。為了確保要么執(zhí)行蕊苗,要么不執(zhí)行,就可以使用事務(wù)沿彭。要將有組語(yǔ)句作為事務(wù)考慮朽砰,就需要通過(guò)ACID測(cè)試,即原子性,一致性瞧柔,隔離性和持久性熔掺。 鎖:在所以的DBMS中,鎖是實(shí)現(xiàn)事務(wù)的關(guān)鍵非剃,鎖可以保證事務(wù)的完整性和并發(fā)性置逻。與現(xiàn)實(shí)生活中鎖一樣,它可以使某些數(shù)據(jù)的擁有者备绽,在某段時(shí)間內(nèi)不能使用某些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)券坞。當(dāng)然鎖還分級(jí)別的。
9肺素、什么叫視圖恨锚?游標(biāo)是什么?
視圖:是一種虛擬的表倍靡,具有和物理表相同的功能猴伶。可以對(duì)視圖進(jìn)行增塌西,改他挎,查,操作捡需,試圖通常是有一個(gè)表或者多個(gè)表的行或列的子集办桨。對(duì)視圖的修改會(huì)影響基本表。它使得我們獲取數(shù)據(jù)更容易站辉,相比多表查詢(xún)呢撞。 游標(biāo):是對(duì)查詢(xún)出來(lái)的結(jié)果集作為一個(gè)單元來(lái)有效的處理。游標(biāo)可以定在該單元中的特定行饰剥,從結(jié)果集的當(dāng)前行檢索一行或多行殊霞。可以對(duì)結(jié)果集當(dāng)前行做修改汰蓉。一般不使用游標(biāo)绷蹲,但是需要逐條處理數(shù)據(jù)的時(shí)候,游標(biāo)顯得十分重要古沥。
10瘸右、視圖的優(yōu)缺點(diǎn)
優(yōu)點(diǎn): 1)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),因?yàn)橐晥D可以有選擇性的選取數(shù)據(jù)庫(kù)里的一部分岩齿。 2 )用戶(hù)通過(guò)簡(jiǎn)單的查詢(xún)可以從復(fù)雜查詢(xún)中得到結(jié)果太颤。 3 )維護(hù)數(shù)據(jù)的獨(dú)立性,試圖可從多個(gè)表檢索數(shù)據(jù)盹沈。 4 )對(duì)于相同的數(shù)據(jù)可產(chǎn)生不同的視圖龄章。 缺點(diǎn): 性能:查詢(xún)視圖時(shí)吃谣,必須把視圖的查詢(xún)轉(zhuǎn)化成對(duì)基本表的查詢(xún),如果這個(gè)視圖是由一個(gè)復(fù)雜的多表查詢(xún)所定義做裙,那么岗憋,那么就無(wú)法更改數(shù)據(jù)
11、列舉幾種表連接方式,有什么區(qū)別锚贱?
內(nèi)連接仔戈、自連接、外連接(左拧廊、右监徘、全)、交叉連接 內(nèi)連接:只有兩個(gè)元素表相匹配的才能在結(jié)果集中顯示吧碾。 外連接: 左外連接:左邊為驅(qū)動(dòng)表凰盔,驅(qū)動(dòng)表的數(shù)據(jù)全部顯示,匹配表的不匹配的不會(huì)顯示倦春。 右外連接:右邊為驅(qū)動(dòng)表户敬,驅(qū)動(dòng)表的數(shù)據(jù)全部顯示,匹配表的不匹配的不會(huì)顯示睁本。 全外連接:連接的表中不匹配的數(shù)據(jù)全部會(huì)顯示出來(lái)尿庐。 交叉連接: 笛卡爾效應(yīng),顯示的結(jié)果是鏈接表數(shù)的乘積添履。
12屁倔、主鍵和外鍵的區(qū)別?
主鍵在本表中是唯一的暮胧、不可唯空的,外鍵可以重復(fù)可以唯空问麸;外鍵和另一張表的主鍵關(guān)聯(lián)往衷,不能創(chuàng)建對(duì)應(yīng)表中不存在的外鍵。
13严卖、在數(shù)據(jù)庫(kù)中查詢(xún)語(yǔ)句速度很慢席舍,如何優(yōu)化?
1.建索引 2.減少表之間的關(guān)聯(lián) 3.優(yōu)化sql哮笆,盡量讓sql很快定位數(shù)據(jù)来颤,不要讓sql做全表查詢(xún),應(yīng)該走索引,把數(shù)據(jù) 量大的表排在前面 4.簡(jiǎn)化查詢(xún)字段稠肘,沒(méi)用的字段不要福铅,已經(jīng)對(duì)返回結(jié)果的控制,盡量返回少量數(shù)據(jù) 5.盡量用PreparedStatement來(lái)查詢(xún)项阴,不要用Statement
14滑黔、數(shù)據(jù)庫(kù)三范式是什么?
第一范式:列不可再分 第二范式:行可以唯一區(qū)分,主鍵約束 第三范式:表的非主屬性不能依賴(lài)與其他表的非主屬性 外鍵約束 且三大范式是一級(jí)一級(jí)依賴(lài)的,第二范式建立在第一范式上略荡,第三范式建立第一第二范式上
15庵佣、union和union all有什么不同?
UNION在進(jìn)行表鏈接后會(huì)篩選掉重復(fù)的記錄,所以在表鏈接后會(huì)對(duì)所產(chǎn)生的結(jié)果集進(jìn)行排序運(yùn)算汛兜,刪除重復(fù)的記錄再返回結(jié)果巴粪。實(shí)際大部分應(yīng)用中是不會(huì)產(chǎn)生重復(fù)的記錄,最常見(jiàn)的是過(guò)程表與歷史表UNION粥谬。 UNION ALL只是簡(jiǎn)單的將兩個(gè)結(jié)果合并后就返回验毡。這樣,如果返回的兩個(gè)結(jié)果集中有重復(fù)的數(shù)據(jù)帝嗡,那么返回的結(jié)果集就會(huì)包含重復(fù)的數(shù)據(jù)了晶通。 從效率上說(shuō),UNION ALL 要比UNION快很多哟玷,所以狮辽,如果可以確認(rèn)合并的兩個(gè)結(jié)果集中不包含重復(fù)的數(shù)據(jù)的話(huà),那么就使用UNION ALL巢寡。
16喉脖、Varchar2和varchar有什么區(qū)別?
Char的長(zhǎng)度是固定的抑月,而varchar2的長(zhǎng)度是可以變化的树叽,比如,存儲(chǔ)字符串“abc”對(duì)于char(20)谦絮,表示你存儲(chǔ)的字符將占20個(gè)字節(jié)题诵,包含17個(gè)空,而同樣的varchar2(20)只占了3個(gè)字節(jié)层皱,20只是最大值性锭,當(dāng)你存儲(chǔ)的字符小于20時(shí),按實(shí)際長(zhǎng)度存儲(chǔ)叫胖。 char的效率要被varchar2的效率高草冈。 目前varchar是varchar2的同義詞,工業(yè)標(biāo)準(zhǔn)的varchar類(lèi)型可以存儲(chǔ)空字符串瓮增,但是oracle不能這樣做怎棱,盡管它保留以后這樣做的權(quán)利。Oracle自己開(kāi)發(fā)了一個(gè)數(shù)據(jù)類(lèi)型varchar2,這個(gè)類(lèi)型不是一個(gè)標(biāo)準(zhǔn)的varchar绷跑,他將在數(shù)據(jù)庫(kù)中varchar列可以存儲(chǔ)空字符串的特性改為存儲(chǔ)null值拳恋,如果你想有向后兼容的能力,oracle建議使用varchar2而不是varchar
17你踩、Oracle和Mysql的區(qū)別诅岩?
1)庫(kù)函數(shù)不同讳苦。 2)Oracle是用表空間來(lái)管理的,Mysql不是吩谦。 3)顯示當(dāng)前所有的表鸳谜、用戶(hù)、改變連接用戶(hù)式廷、顯示當(dāng)前連接用戶(hù)咐扭、執(zhí)行外部腳本的語(yǔ)句的不同。 4)分頁(yè)查詢(xún)時(shí)候時(shí)候滑废,mysql用limit oracle用rownum
mysql> SELECT * FROM table LIMIT 5,10; // 檢索記錄行 6-15
//為了檢索從某一個(gè)偏移量到記錄集的結(jié)束所有的記錄行蝗肪,可以指定第二個(gè)參數(shù)為 -1: mysql> SELECT * FROM table LIMIT 95,-1; // 檢索記錄行 96-last.
//如果只給定一個(gè)參數(shù),它表示返回最大的記錄行數(shù)目: mysql> SELECT * FROM table LIMIT 5; //檢索前 5 個(gè)記錄行
//換句話(huà)說(shuō)蠕趁,LIMIT n 等價(jià)于 LIMIT 0,n薛闪。 5)sql的語(yǔ)法的不同。