1、為什么 UNION ALL 比(bi) UNION 快?
答:因為在(zai)(zai)使(shi)用(yong) UNION 的(de)時候,需要刪(shan)除重復的(de)記錄,但是使(shi)用(yong) UNION ALL 的(de)時候不用(yong)刪(shan)除。所以如果在(zai)(zai)知道(dao)需要 UNION 的(de)查詢不可能出現重復數(shu)據的(de)時候,一定要使(shi)用(yong) UNION ALL。
2、什(shen)么是(shi)唯(wei)一索引?
答:唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)索(suo)(suo)引(yin)可(ke)(ke)以(yi)確(que)保索(suo)(suo)引(yin)列(lie)不包含重復的(de)(de)值(zhi)。在(zai)(zai)多(duo)列(lie)唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)索(suo)(suo)引(yin)的(de)(de)情況下,該索(suo)(suo)引(yin)可(ke)(ke)以(yi)確(que)保索(suo)(suo)引(yin)列(lie)中每個(ge)值(zhi)組合(he)都(dou)是(shi)唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)的(de)(de)。聚集索(suo)(suo)引(yin)和非聚集索(suo)(suo)引(yin)都(dou)可(ke)(ke)以(yi)是(shi)唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)的(de)(de)。因此,只要列(lie)中的(de)(de)數(shu)據是(shi)唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)的(de)(de),就可(ke)(ke)以(yi)在(zai)(zai)同一(yi)(yi)(yi)(yi)(yi)個(ge)表上創(chuang)建(jian)一(yi)(yi)(yi)(yi)(yi)個(ge)唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)的(de)(de)聚集索(suo)(suo)引(yin)和多(duo)個(ge)唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)的(de)(de)非聚集索(suo)(suo)引(yin)。只有當唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)性是(shi)數(shu)據本身的(de)(de)特征時,指(zhi)定唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)索(suo)(suo)引(yin)才有意義。如果必須實施唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)性以(yi)確(que)保數(shu)據的(de)(de)完整性,則應在(zai)(zai)列(lie)上創(chuang)建(jian)UNIQUE或PRIMARY KEY約束(shu),而(er)不要創(chuang)建(jian)唯(wei)(wei)一(yi)(yi)(yi)(yi)(yi)索(suo)(suo)引(yin)。
3、為什么(me)要(yao)及時(shi)刪除不用的觸發(fa)器?
答:觸(chu)(chu)(chu)發(fa)(fa)(fa)器定(ding)義之(zhi)后(hou),每(mei)次(ci)執(zhi)行觸(chu)(chu)(chu)發(fa)(fa)(fa)事件(jian),都(dou)會激活(huo)觸(chu)(chu)(chu)發(fa)(fa)(fa)器并執(zhi)行觸(chu)(chu)(chu)發(fa)(fa)(fa)器中的語(yu)句。如果需求(qiu)發(fa)(fa)(fa)生(sheng)變(bian)化(hua),而觸(chu)(chu)(chu)發(fa)(fa)(fa)器沒有進(jin)行相(xiang)應的改變(bian)或者(zhe)刪除,則觸(chu)(chu)(chu)發(fa)(fa)(fa)器仍然(ran)會執(zhi)行舊(jiu)的語(yu)句,從而會影(ying)響新的數據的完整性。因此(ci)要將(jiang)不(bu)再使用的觸(chu)(chu)(chu)發(fa)(fa)(fa)器及時(shi)刪除。
4、自(zi)定(ding)義函數(shu)支持輸出參數(shu)嗎?
答:自(zi)定義函(han)數(shu)可(ke)以(yi)接受(shou)零個或多個輸入參(can)數(shu),其返回值可(ke)以(yi)是一個數(shu)值,也可(ke)以(yi)是一個表(biao),但是自(zi)定義函(han)數(shu)不支持輸出參(can)數(shu)。
5、STR 函數(shu)在遇到小數(shu)時如(ru)何處(chu)理(li)?
答:在使用STR函數(shu)(shu)(shu)時,如(ru)果數(shu)(shu)(shu)字(zi)為(wei)小(xiao)(xiao)數(shu)(shu)(shu),則在轉換為(wei)字(zi)符串數(shu)(shu)(shu)據(ju)類型時,只(zhi)返(fan)回其(qi)整數(shu)(shu)(shu)部(bu)(bu)分,如(ru)果小(xiao)(xiao)數(shu)(shu)(shu)點后的數(shu)(shu)(shu)字(zi)大(da)于等(deng)于5,則四舍(she)五(wu)入返(fan)回其(qi)整數(shu)(shu)(shu)部(bu)(bu)分。
6、是不是索引(yin)建立得越(yue)多越(yue)好?
答:合理的索(suo)引可以(yi)提高查詢(xun)的速度,但不是(shi)(shi)索(suo)引越多越好。在執行插(cha)(cha)入(ru)語(yu)句(ju)的時(shi)候,數據(ju)庫要(yao)為新 插(cha)(cha)入(ru)的記錄(lu)建立索(suo)引。所以(yi)過多的索(suo)引會導致插(cha)(cha)入(ru)操作變慢。原(yuan)則上(shang)是(shi)(shi)只有查詢(xun)用的字(zi)段才建立索(suo)引。
7、視(shi)圖的(de)作用(yong)是什(shen)么?
答:數據庫視圖的作用主要有:
1. 數據庫視圖(tu)隱藏了數據的(de)復雜性。
2. 數據庫視圖有利于控(kong)制(zhi)用戶對表中某些列的訪(fang)問。
3. 數(shu)(shu)據(ju)(ju)(ju)庫視(shi)圖(tu)(tu)(tu)(tu)使(shi)用(yong)(yong)戶查(cha)詢變(bian)得簡單。視(shi)圖(tu)(tu)(tu)(tu)是(shi)一(yi)個(ge)(ge)虛擬表(biao),其內容由(you)查(cha)詢定義(yi)(yi)。同真實的(de)(de)(de)(de)表(biao)一(yi)樣,視(shi)圖(tu)(tu)(tu)(tu)包含(han)一(yi)系列帶有(you)名稱的(de)(de)(de)(de)列和(he)行(xing)數(shu)(shu)據(ju)(ju)(ju)。但是(shi),視(shi)圖(tu)(tu)(tu)(tu)并不(bu)在數(shu)(shu)據(ju)(ju)(ju)庫中以存(cun)儲的(de)(de)(de)(de)數(shu)(shu)據(ju)(ju)(ju)值集(ji)形(xing)式(shi)存(cun)在。行(xing)和(he)列數(shu)(shu)據(ju)(ju)(ju)來自(zi)由(you)定義(yi)(yi)視(shi)圖(tu)(tu)(tu)(tu)的(de)(de)(de)(de)查(cha)詢所(suo)引用(yong)(yong)的(de)(de)(de)(de)表(biao),并且在引用(yong)(yong)視(shi)圖(tu)(tu)(tu)(tu)時(shi)動(dong)態生成。對其中所(suo)引用(yong)(yong)的(de)(de)(de)(de)基礎表(biao)來說,視(shi)圖(tu)(tu)(tu)(tu)的(de)(de)(de)(de)作用(yong)(yong)類(lei)似(si)于篩(shai)選。定義(yi)(yi)視(shi)圖(tu)(tu)(tu)(tu)的(de)(de)(de)(de)篩(shai)選可以來自(zi)當前或(huo)其它數(shu)(shu)據(ju)(ju)(ju)庫的(de)(de)(de)(de)一(yi)個(ge)(ge)或(huo)多(duo)個(ge)(ge)表(biao),或(huo)者其它視(shi)圖(tu)(tu)(tu)(tu)。分布式(shi)查(cha)詢也(ye)可用(yong)(yong)于定義(yi)(yi)使(shi)用(yong)(yong)多(duo)個(ge)(ge)異類(lei)源數(shu)(shu)據(ju)(ju)(ju)的(de)(de)(de)(de)視(shi)圖(tu)(tu)(tu)(tu)。如果有(you)幾(ji)臺不(bu)同的(de)(de)(de)(de)服(fu)務器分別存(cun)儲組織中不(bu)同地(di)區的(de)(de)(de)(de)數(shu)(shu)據(ju)(ju)(ju),而您需(xu)要將這些服(fu)務器上(shang)相似(si)結構的(de)(de)(de)(de)數(shu)(shu)據(ju)(ju)(ju)組合起來,這種方式(shi)就很有(you)用(yong)(yong)。通過(guo)(guo)視(shi)圖(tu)(tu)(tu)(tu)進(jin)行(xing)查(cha)詢沒有(you)任何限制,通過(guo)(guo)它們進(jin)行(xing)數(shu)(shu)據(ju)(ju)(ju)修改時(shi)的(de)(de)(de)(de)限制也(ye)很少。
8、存儲過程和自定義函數的(de)區別?
答:存儲過程,功能強大,可(ke)以(yi)執(zhi)行(xing)包(bao)括修改(gai)表等一系列數(shu)據庫(ku)操(cao)作,也可(ke)以(yi)創建為 SQL Server 啟動(dong) 時自動(dong)運行(xing)的(de)存儲過程。而自定義函數(shu),用(yong)戶定義函數(shu)不能用(yong)于(yu)執(zhi)行(xing)一組(zu)修改(gai)全局(ju)數(shu)據庫(ku)狀態(tai)的(de)操(cao)作。
存(cun)儲(chu)過程,可(ke)(ke)以(yi)使用(yong)(yong)非確定函(han)數(shu)(shu)。自(zi)定義(yi)(yi)函(han)數(shu)(shu),不(bu)允許在用(yong)(yong)戶定義(yi)(yi)函(han)數(shu)(shu)主(zhu)體中(zhong)內置(zhi)非確定函(han)數(shu)(shu)。 存(cun)儲(chu)過程,可(ke)(ke)返回(hui)(hui)(hui)記(ji)錄集。自(zi)定義(yi)(yi)函(han)數(shu)(shu),可(ke)(ke)以(yi)返回(hui)(hui)(hui)表變量,也可(ke)(ke)以(yi)有任意個輸出(chu)參數(shu)(shu)。 存(cun)儲(chu)過程,其返回(hui)(hui)(hui)值(zhi)不(bu)能被直接(jie)引用(yong)(yong),必須單獨調用(yong)(yong)。自(zi)定義(yi)(yi)函(han)數(shu)(shu),其返回(hui)(hui)(hui)值(zhi)可(ke)(ke)以(yi)被直接(jie)引用(yong)(yong),也就是(shi)可(ke)(ke)以(yi)直接(jie) select * from 函(han)數(shu)(shu)。
9、一個表中的 Id 有多(duo)個記錄,把所有這個 id 的記錄查出來,并顯示(shi)共有多(duo)少(shao)條記錄數?
答:可以用以下(xia) SQL 語句實現:
select id, Count(*) from tb group by id having count(*)>1
select*from(select count(ID) as count from table group by ID)T where T.count>1
10、有一張表(biao),里面有 3 個字段:語文,數學(xue),英(ying)(ying)語。其中有 3 條記錄分(fen)(fen)別表(biao)示(shi)語文 70 分(fen)(fen),數學(xue)80 分(fen)(fen),英(ying)(ying)語 58 分(fen)(fen),請用一條 sql 語句查詢出這三條記錄并(bing)按以下條件(jian)顯示(shi)出來(并(bing)寫出您的思路):
大于(yu)或(huo)等于(yu) 80 表(biao)示(shi)(shi)優秀(xiu),大于(yu)或(huo)等于(yu) 60 表(biao)示(shi)(shi)及格,小于(yu) 60 分表(biao)示(shi)(shi)不及格。
顯示格式:
語文
數學
英語
及格
優秀
不及格
答:select
(case when 語(yu)文>=80 then '優秀'
when 語文>=60 then '及(ji)格' else '不(bu)及(ji)格') as 語文,
(case when 數學>=80 then '優秀' when 數學>=60 then '及格'
else '不及格') as 數學,
(case when 英語>=80 then '優秀' when 英語>=60 then '及格'
else '不(bu)及格') as 英語,
from table
11、一(yi)個(ge)日期(qi)判斷的 sql 語句,請取出 tb_send 表中日期(qi)(SendTime 字(zi)段)為(wei)當(dang)天的所有(you)記錄?(SendTime字(zi)段為(wei) datetime 型,包含(han)日期(qi)與時間)?
答(da):select * from tb where datediff(dd,SendTime,getdate())=0
12、表中有 A B C 三列(lie),用 SQL 語句實現(xian):當(dang) A 列(lie)大于(yu)(yu) B 列(lie)時(shi)選擇 A 列(lie)否(fou)則選擇 B 列(lie),當(dang) B 列(lie)大于(yu)(yu) C 列(lie)時(shi)選擇 B 列(lie)否(fou)則選擇 C 列(lie)。
答:select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name
13、如何提高日(ri)志的切換頻率?
答:通(tong)過參數 ARCHIVE_LAG_TARGET 可(ke)以(yi)控制日志(zhi)切(qie)換的時(shi)間間隔(ge),以(yi)秒(miao)為單位。通(tong)過減少時(shi)間間隔(ge),從(cong)而實現提高日志(zhi)的切(qie)換頻率。
SQL> ALTER SYSTEM SET ARCHIVE_LAG_TARGET=50 SCOPE=both
14、歸(gui)(gui)檔模(mo)式(shi)與非歸(gui)(gui)檔模(mo)式(shi)?為什(shen)么歸(gui)(gui)檔模(mo)式(shi)可以恢復到任意時刻?
答:歸(gui)(gui)(gui)(gui)檔(dang)(dang)是(shi)在(zai)重(zhong)做(zuo)日志(zhi)文件(jian)(jian)被(bei)覆蓋(gai)(gai)之(zhi)前,將該重(zhong)做(zuo)日志(zhi)文件(jian)(jian)通過復制操(cao)(cao)作系統文件(jian)(jian)的(de)(de)方式(shi)(shi)(shi),保(bao)存(cun)到指定的(de)(de)位置。保(bao)存(cun)下(xia)來的(de)(de)重(zhong)做(zuo)日志(zhi)文件(jian)(jian)的(de)(de)集合被(bei)稱(cheng)(cheng)為歸(gui)(gui)(gui)(gui)檔(dang)(dang)重(zhong)做(zuo)日志(zhi)文件(jian)(jian),復制的(de)(de)過程被(bei)稱(cheng)(cheng)為歸(gui)(gui)(gui)(gui)檔(dang)(dang)。在(zai) 歸(gui)(gui)(gui)(gui) 檔(dang)(dang) 日 志(zhi) ( ARCHIVELOG )模式(shi)(shi)(shi)下(xia), 數 據(ju) 庫(ku) 對(dui) 重(zhong) 做(zuo) 日 志(zhi) 文 件(jian)(jian) 進 行(xing) 歸(gui)(gui)(gui)(gui) 檔(dang)(dang) 操(cao)(cao) 作 。 非 歸(gui)(gui)(gui)(gui) 檔(dang)(dang) 日 志(zhi)(NOARCHIVELOG)模式(shi)(shi)(shi)下(xia),不會(hui)對(dui)重(zhong)做(zuo)日志(zhi)文件(jian)(jian)進行(xing)歸(gui)(gui)(gui)(gui)檔(dang)(dang)操(cao)(cao)作。由于非歸(gui)(gui)(gui)(gui)檔(dang)(dang)模式(shi)(shi)(shi)不會(hui)在(zai)覆蓋(gai)(gai)之(zhi)前保(bao)存(cun), 這樣就造成了數據(ju)庫(ku)在(zai)一定時(shi)間之(zhi)前的(de)(de)重(zhong)做(zuo)日志(zhi)文件(jian)(jian)丟失,也就不能恢復到被(bei)覆蓋(gai)(gai)之(zhi)前。而(er)歸(gui)(gui)(gui)(gui)檔(dang)(dang)模式(shi)(shi)(shi)在(zai)任(ren)意時(shi)間上(shang)都(dou)有重(zhong)做(zuo)日志(zhi)文件(jian)(jian),故可以恢復到任(ren)意時(shi)刻。
15、觸發器中能否用 COMMIT,為(wei)什么?
答:在觸發(fa)器中不能使(shi)用COMMIT等事務(wu)(wu)控制語句。因為觸發(fa)器是事務(wu)(wu)觸發(fa)的如果有(you)事務(wu)(wu)控制語句就會影響到觸發(fa)它的事務(wu)(wu)。即連帶觸發(fa)它的語句之前的已經完成的沒有(you)提交的語句都(dou)要受(shou)到影響。這是會影響到數據的一致性的。
16、你對游(you)標的理解,游(you)標的分類?
答:游(you)標(biao)(biao)是(shi)結(jie)果集數據(ju)中的(de)指針,作用(yong)是(shi)為(wei)遍歷結(jie)果集時,存儲每條記錄的(de)結(jie)果。游(you)標(biao)(biao)分為(wei)顯(xian)式游(you)標(biao)(biao)和(he)隱式游(you)標(biao)(biao)。
17、如何設置(zhi)網(wang)絡(luo)數據包的大(da)小?
答:一般情況下,設(she)置網絡(luo)數(shu)據包的大(da)小可(ke)參考以(yi)下方法。如果應(ying)用程(cheng)序常執行大(da)容量(liang)復制操作(zuo)或者是發(fa)送、接收大(da)量(liang)的text 和(he)image 數(shu)據的話(hua),可(ke)以(yi)將此值設(she)大(da)一點。如果應(ying)用程(cheng)序接收和(he)發(fa)送的信息量(liang)都很小,那么可(ke)以(yi)將其設(she)為512 字節。
18、談談你對(dui)事務的理解(jie)?
答:事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)從COMMIT、ROLLBACK、連接到數(shu)據庫或(huo)開始第一條(tiao)可(ke)執行的(de)SQL語(yu)(yu)(yu)(yu)句時(shi)開始,到一條(tiao)COMMIT、ROLLBACK語(yu)(yu)(yu)(yu)句或(huo)退出數(shu)據庫時(shi)結束(shu)。如(ru)(ru)果(guo)(guo)在(zai)(zai)一個(ge)(ge)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)中包(bao)含DDL語(yu)(yu)(yu)(yu)句,則(ze)(ze)在(zai)(zai)DDL語(yu)(yu)(yu)(yu)句的(de)前(qian)(qian)后都會隱(yin)含地執行COMMIT 語(yu)(yu)(yu)(yu)句,從而開始或(huo)結束(shu)一個(ge)(ge)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)。如(ru)(ru)果(guo)(guo)一個(ge)(ge)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)由于某些(xie)故障或(huo)者由于用(yong)(yong)戶(hu)改變主(zhu)意(yi)而必(bi)須在(zai)(zai)提交前(qian)(qian)取消它(ta),則(ze)(ze)數(shu)據庫被(bei)恢復(fu)到這些(xie)語(yu)(yu)(yu)(yu)句和過程執行之(zhi)前(qian)(qian)的(de)狀態(tai)。利用(yong)(yong)ROLLBACK 語(yu)(yu)(yu)(yu)句可(ke)以在(zai)(zai)COMMIT 命令前(qian)(qian)隨時(shi)撤(che)消或(huo)回(hui)退一個(ge)(ge)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)。可(ke)以回(hui)退整個(ge)(ge)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu),也可(ke)以回(hui)退部分(fen)(fen)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu),但是(shi)(shi)不(bu)能回(hui)退一個(ge)(ge)已(yi)經(jing)被(bei)提交的(de)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)。回(hui)退部分(fen)(fen)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)的(de) ROLLBACK 命令為:ROLLBACK to savepoint 存(cun)(cun)(cun)儲(chu)點(dian)名(ming),存(cun)(cun)(cun)儲(chu)點(dian)是(shi)(shi)用(yong)(yong)戶(hu)放入(ru)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)中的(de)標記(ji),用(yong)(yong)來表示一個(ge)(ge)可(ke)被(bei)回(hui)退的(de)位置。存(cun)(cun)(cun)儲(chu)點(dian)通(tong)過在(zai)(zai)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)中放入(ru)一個(ge)(ge)SAVEPOINT 命令而被(bei)插入(ru)。該命令的(de)語(yu)(yu)(yu)(yu)法(fa)是(shi)(shi):SAVEPOINT 存(cun)(cun)(cun)儲(chu)點(dian)名(ming),如(ru)(ru)果(guo)(guo)在(zai)(zai) ROLLBACK 語(yu)(yu)(yu)(yu)句中沒(mei)有給出存(cun)(cun)(cun)儲(chu)點(dian)名(ming),則(ze)(ze)整個(ge)(ge)事(shi)(shi)(shi)(shi)(shi)(shi)務(wu)(wu)(wu)(wu)被(bei)回(hui)退。
19、談談你對索(suo)引的理解?
答(da):索引(yin)是若干(gan)數(shu)據(ju)行的(de)(de)(de)關鍵字(zi)的(de)(de)(de)列表,查詢(xun)數(shu)據(ju)時,通過索引(yin)中的(de)(de)(de)關鍵字(zi)可(ke)以(yi)快速(su)定位到要訪問(wen)的(de)(de)(de) 記錄所(suo)在的(de)(de)(de)數(shu)據(ju)塊,從而大大減少讀取(qu)數(shu)據(ju)塊的(de)(de)(de) I/O 次數(shu),因(yin)此可(ke)以(yi)顯著(zhu)提高性能。
20、事務和鎖有什么關系?
答(da):可以(yi)(yi)使用(yong)多(duo)種機制來確保(bao)數(shu)據的(de)(de)完(wan)整性(xing),例如約束、觸(chu)發器以(yi)(yi)及事務(wu)和鎖(suo)等。事務(wu)和 鎖(suo)的(de)(de)關(guan)系非常(chang)緊密。事務(wu)包(bao)含一(yi)(yi)系列(lie)的(de)(de)操作,這些操作要(yao)么全部(bu)(bu)成功,要(yao)么全部(bu)(bu)失敗,通過事務(wu)機制管(guan)理(li)多(duo)個事務(wu),保(bao)證事務(wu)的(de)(de)一(yi)(yi)致性(xing),事務(wu)中(zhong)使用(yong)鎖(suo)保(bao)護指定的(de)(de)資源(yuan),防止(zhi)其(qi)他(ta)用(yong)戶修改另外一(yi)(yi)個還沒(mei)有完(wan)成的(de)(de)事務(wu)中(zhong)的(de)(de)數(shu)據。
21、本地索引(yin)(yin)與(yu)全局索引(yin)(yin)的差(cha)別(bie)與(yu)適用(yong)情況。
答(da):對(dui)于本地索(suo)引(yin),每(mei)一個表分(fen)區對(dui)應一個索(suo)引(yin)分(fen)區,當(dang)表的分(fen)區發生變化時,索(suo)引(yin)的維護由數據庫(ku) 自動進行。對(dui)于全(quan)局(ju)索(suo)引(yin),可(ke)以選擇是否分(fen)區,而且索(suo)引(yin)的分(fen)區可(ke)以不(bu)與表分(fen)區相對(dui)應。當(dang)對(dui)分(fen)區進行維 護操作時,通(tong)常(chang)會導(dao)致全(quan)局(ju)索(suo)引(yin)的 INVALDED,必須在執(zhi)行完(wan)操作后(hou) REBUILD。
22、插(cha)入記(ji)錄時(shi)可以不指定字(zi)段名稱嗎(ma)?
答:不管使(shi)用哪種 INSERT 語法,都必(bi)須給出 VALUES 的(de)正確數目。如果不提供字(zi)(zi)段名,則必(bi)須給 每個字(zi)(zi)段提供一(yi)(yi)個值(zhi)(zhi),否則將(jiang)產生一(yi)(yi)條錯誤(wu)消息。如果要在 INSERT 操(cao)作中省(sheng)略某些字(zi)(zi)段,這些字(zi)(zi)段需要 滿足一(yi)(yi)定(ding)(ding)條件:該列定(ding)(ding)義為(wei)允許空值(zhi)(zhi);或(huo)者表定(ding)(ding)義時給出默認值(zhi)(zhi),如果不給出值(zhi)(zhi),將(jiang)使(shi)用默認值(zhi)(zhi)。
23、delete、truncate 和 drop 的區別?
答:Delete 命令(ling)用(yong)來刪除(chu)(chu)表的(de)全部或(huo)者一(yi)部分數據行,執(zhi)行 delete 之后,用(yong)戶(hu)需要提交(commmit)或(huo)者 回滾(rollback) transaction 來執(zhi)行刪除(chu)(chu)或(huo)者撤(che)銷刪除(chu)(chu),delete 命令(ling)會觸發(fa)這(zhe)個表上所有的(de) delete 觸發(fa)器。
Truncate 刪除表中的(de)所有數據,這個操作不能(neng)回滾(gun),也不會觸(chu)(chu)發這個表上的(de)觸(chu)(chu)發器(qi),truncate 比 delete更(geng)快(kuai),占(zhan)用(yong)的(de)空間(jian)更(geng)小(xiao)。
Drop 命(ming)令(ling)從數據庫中刪除表,所有(you)的(de)數據行,索引(yin)和權限也(ye)會(hui)被(bei)刪除,所有(you)的(de)DML觸發(fa)器也(ye)不(bu)會(hui)被(bei)觸發(fa),這個命(ming)令(ling)也(ye)不(bu)能回(hui)滾。
24、為什么 group by 和 order by 會使(shi)查詢變慢?
答:group by 和 order by 操作通常需要創建一(yi)個臨時表(biao)來處理(li)查(cha)詢(xun)的結(jie)果,所以(yi)如果查(cha)詢(xun)結(jie)果很多的 話會嚴(yan)重影響(xiang)性能。
25、簡述數據庫的設計過程。
答:數據庫設計(ji)分為以下五個階段:
需(xu)求(qiu)分(fen)析:主要是準確收(shou)集(ji)用(yong)戶信息需(xu)求(qiu)和處理(li)需(xu)求(qiu),并對收(shou)集(ji)的(de)結果進行整理(li)和分(fen)析,形成需(xu)求(qiu)說明。
概(gai)念結構設(she)計(ji):對用戶需求(qiu)進行綜(zong)合、歸納、抽(chou)象(xiang),形成一個與(yu)(yu)與(yu)(yu)具(ju)體的 DBMS 無關(guan)概(gai)念模型(xing)(一般為ER模型(xing))。
邏輯結構設(she)計:將概念結構設(she)計的(de)(de)概念模型轉化(hua)為某個(ge)特定(ding)的(de)(de) DBMS 所支(zhi)持的(de)(de)數(shu)據(ju)模型,建(jian)立數(shu)據(ju)庫邏輯模式,并對其進(jin)行優化(hua),同時為各種用戶和應用設(she)計外模式。
物理(li)結(jie)構設計:為(wei)設計好的邏輯模型選擇(ze)物理(li)結(jie)構,包括存儲結(jie)構和存取(qu)方法等(deng),建(jian)立數據庫物理(li)模式。
實施和維護(hu):實施就是使用DLL語言建(jian)立(li)數(shu)(shu)據庫(ku)模式,將實際(ji)數(shu)(shu)據載入(ru)數(shu)(shu)據庫(ku),建(jian)立(li)真正的數(shu)(shu)據庫(ku)。維護(hu)階(jie)段是對運行中的數(shu)(shu)據庫(ku)進行評價、調整和修改。