1、為(wei)什么 UNION ALL 比(bi) UNION 快?

  答:因(yin)為在(zai)使(shi)用(yong) UNION 的時候(hou),需要刪(shan)除重復的記錄,但是(shi)使(shi)用(yong) UNION ALL 的時候(hou)不用(yong)刪(shan)除。所以如(ru)果在(zai)知道需要 UNION 的查(cha)詢(xun)不可能(neng)出現重復數據的時候(hou),一定要使(shi)用(yong) UNION ALL。

  2、什么(me)是(shi)唯(wei)一索引?

  答:唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)索(suo)(suo)引可(ke)以(yi)(yi)確保索(suo)(suo)引列(lie)(lie)不包(bao)含重復的(de)(de)(de)值(zhi)。在(zai)多列(lie)(lie)唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)索(suo)(suo)引的(de)(de)(de)情況下,該索(suo)(suo)引可(ke)以(yi)(yi)確保索(suo)(suo)引列(lie)(lie)中(zhong)每(mei)個(ge)(ge)值(zhi)組合都是(shi)唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)的(de)(de)(de)。聚集(ji)索(suo)(suo)引和非聚集(ji)索(suo)(suo)引都可(ke)以(yi)(yi)是(shi)唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)的(de)(de)(de)。因(yin)此,只要列(lie)(lie)中(zhong)的(de)(de)(de)數(shu)據(ju)是(shi)唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)的(de)(de)(de),就可(ke)以(yi)(yi)在(zai)同(tong)一(yi)(yi)(yi)(yi)個(ge)(ge)表上(shang)創建(jian)一(yi)(yi)(yi)(yi)個(ge)(ge)唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)的(de)(de)(de)聚集(ji)索(suo)(suo)引和多個(ge)(ge)唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)的(de)(de)(de)非聚集(ji)索(suo)(suo)引。只有(you)當唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)性(xing)是(shi)數(shu)據(ju)本身(shen)的(de)(de)(de)特征(zheng)時(shi),指(zhi)定唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)索(suo)(suo)引才有(you)意義。如(ru)果必須實施唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)性(xing)以(yi)(yi)確保數(shu)據(ju)的(de)(de)(de)完整性(xing),則應在(zai)列(lie)(lie)上(shang)創建(jian)UNIQUE或PRIMARY KEY約束,而不要創建(jian)唯(wei)(wei)(wei)(wei)一(yi)(yi)(yi)(yi)索(suo)(suo)引。

  3、為什么要(yao)及(ji)時(shi)刪除(chu)不用的觸發(fa)器?

  答(da):觸(chu)(chu)發(fa)器(qi)定義之后,每次執行(xing)觸(chu)(chu)發(fa)事件,都會激活觸(chu)(chu)發(fa)器(qi)并執行(xing)觸(chu)(chu)發(fa)器(qi)中的語句(ju)。如果需(xu)求發(fa)生(sheng)變化,而(er)(er)觸(chu)(chu)發(fa)器(qi)沒(mei)有進(jin)行(xing)相應的改(gai)變或者刪除(chu),則觸(chu)(chu)發(fa)器(qi)仍然會執行(xing)舊的語句(ju),從而(er)(er)會影響新的數據的完整性。因此要將不再(zai)使用的觸(chu)(chu)發(fa)器(qi)及時(shi)刪除(chu)。

  4、自定(ding)義函(han)數支持輸出參數嗎?

  答:自(zi)定義函數可(ke)以(yi)接(jie)受零個(ge)或(huo)多個(ge)輸入(ru)參數,其(qi)返(fan)回值可(ke)以(yi)是一個(ge)數值,也(ye)可(ke)以(yi)是一個(ge)表(biao),但是自(zi)定義函數不支(zhi)持輸出參數。

  5、STR 函數在(zai)遇到(dao)小數時(shi)如(ru)何處理?

  答(da):在使(shi)用STR函數(shu)時,如(ru)果(guo)數(shu)字(zi)為小數(shu),則(ze)在轉換為字(zi)符串數(shu)據類型時,只(zhi)返回(hui)其(qi)整數(shu)部分,如(ru)果(guo)小數(shu)點后的數(shu)字(zi)大于等于5,則(ze)四舍五(wu)入返回(hui)其(qi)整數(shu)部分。

  6、是(shi)不是(shi)索引建立(li)得越多越好?

  答:合理的索(suo)引(yin)可以提高(gao)查詢的速度(du),但不是索(suo)引(yin)越多(duo)越好。在執行插(cha)入(ru)語句的時候,數據庫要(yao)為新 插(cha)入(ru)的記(ji)錄建立索(suo)引(yin)。所以過多(duo)的索(suo)引(yin)會導致(zhi)插(cha)入(ru)操作變慢。原則上是只有(you)查詢用的字(zi)段才(cai)建立索(suo)引(yin)。

  7、視圖的(de)作用是什么?

  答(da):數據庫視圖的作(zuo)用主(zhu)要有:

  1. 數(shu)據庫(ku)視圖(tu)隱藏了(le)數(shu)據的復(fu)雜性。

  2. 數據庫視圖有利于控制用戶對表中某些列(lie)的訪問。

  3. 數(shu)(shu)據(ju)(ju)(ju)庫(ku)視(shi)(shi)(shi)圖(tu)使用(yong)戶(hu)查(cha)(cha)詢(xun)變得簡單。視(shi)(shi)(shi)圖(tu)是(shi)一個(ge)虛擬表(biao),其內容由查(cha)(cha)詢(xun)定(ding)義(yi)。同真實的(de)(de)表(biao)一樣,視(shi)(shi)(shi)圖(tu)包(bao)含一系(xi)列(lie)帶有名稱的(de)(de)列(lie)和行數(shu)(shu)據(ju)(ju)(ju)。但(dan)是(shi),視(shi)(shi)(shi)圖(tu)并不在數(shu)(shu)據(ju)(ju)(ju)庫(ku)中(zhong)以(yi)存儲(chu)的(de)(de)數(shu)(shu)據(ju)(ju)(ju)值集(ji)形式(shi)存在。行和列(lie)數(shu)(shu)據(ju)(ju)(ju)來(lai)自由定(ding)義(yi)視(shi)(shi)(shi)圖(tu)的(de)(de)查(cha)(cha)詢(xun)所引用(yong)的(de)(de)表(biao),并且在引用(yong)視(shi)(shi)(shi)圖(tu)時(shi)動態生成。對其中(zhong)所引用(yong)的(de)(de)基(ji)礎(chu)表(biao)來(lai)說,視(shi)(shi)(shi)圖(tu)的(de)(de)作用(yong)類似于篩選(xuan)。定(ding)義(yi)視(shi)(shi)(shi)圖(tu)的(de)(de)篩選(xuan)可以(yi)來(lai)自當前或(huo)其它(ta)數(shu)(shu)據(ju)(ju)(ju)庫(ku)的(de)(de)一個(ge)或(huo)多個(ge)表(biao),或(huo)者其它(ta)視(shi)(shi)(shi)圖(tu)。分布式(shi)查(cha)(cha)詢(xun)也(ye)可用(yong)于定(ding)義(yi)使用(yong)多個(ge)異類源數(shu)(shu)據(ju)(ju)(ju)的(de)(de)視(shi)(shi)(shi)圖(tu)。如果(guo)有幾臺不同的(de)(de)服(fu)務器分別存儲(chu)組(zu)(zu)織中(zhong)不同地區的(de)(de)數(shu)(shu)據(ju)(ju)(ju),而您需要將這些服(fu)務器上(shang)相似結構的(de)(de)數(shu)(shu)據(ju)(ju)(ju)組(zu)(zu)合(he)起來(lai),這種方式(shi)就很有用(yong)。通過視(shi)(shi)(shi)圖(tu)進(jin)行查(cha)(cha)詢(xun)沒有任何限(xian)制(zhi),通過它(ta)們進(jin)行數(shu)(shu)據(ju)(ju)(ju)修(xiu)改時(shi)的(de)(de)限(xian)制(zhi)也(ye)很少。

  8、存儲(chu)過程和自(zi)定義(yi)函數(shu)的(de)區(qu)別?

  答:存(cun)(cun)儲過(guo)程,功能(neng)強大,可以執(zhi)行(xing)包括修改(gai)表等一系(xi)列數據庫操作,也(ye)可以創建為 SQL Server 啟動 時自(zi)動運行(xing)的(de)存(cun)(cun)儲過(guo)程。而自(zi)定(ding)義(yi)函數,用戶定(ding)義(yi)函數不能(neng)用于執(zhi)行(xing)一組修改(gai)全局數據庫狀態的(de)操作。

  存儲(chu)過(guo)(guo)程(cheng),可以(yi)(yi)使用(yong)非(fei)確定函(han)(han)數(shu)(shu)(shu)。自(zi)定義(yi)(yi)函(han)(han)數(shu)(shu)(shu),不允許在(zai)用(yong)戶定義(yi)(yi)函(han)(han)數(shu)(shu)(shu)主體中內置非(fei)確定函(han)(han)數(shu)(shu)(shu)。 存儲(chu)過(guo)(guo)程(cheng),可返回(hui)記錄集。自(zi)定義(yi)(yi)函(han)(han)數(shu)(shu)(shu),可以(yi)(yi)返回(hui)表變量,也(ye)可以(yi)(yi)有任意個輸出參數(shu)(shu)(shu)。 存儲(chu)過(guo)(guo)程(cheng),其(qi)返回(hui)值不能被(bei)直接引用(yong),必(bi)須(xu)單獨調(diao)用(yong)。自(zi)定義(yi)(yi)函(han)(han)數(shu)(shu)(shu),其(qi)返回(hui)值可以(yi)(yi)被(bei)直接引用(yong),也(ye)就是(shi)可以(yi)(yi)直接 select * from 函(han)(han)數(shu)(shu)(shu)。

  9、一個(ge)表中的 Id 有(you)多個(ge)記(ji)(ji)錄,把所有(you)這個(ge) id 的記(ji)(ji)錄查(cha)出來,并顯示共有(you)多少條記(ji)(ji)錄數?

  答:可(ke)以用以下 SQL 語(yu)句(ju)實現:

  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、有一(yi)張(zhang)表,里面(mian)有 3 個字段:語(yu)文(wen)(wen),數學(xue),英(ying)語(yu)。其中有 3 條(tiao)記(ji)(ji)錄分(fen)別表示語(yu)文(wen)(wen) 70 分(fen),數學(xue)80 分(fen),英(ying)語(yu) 58 分(fen),請用一(yi)條(tiao) sql 語(yu)句查詢(xun)出(chu)這三條(tiao)記(ji)(ji)錄并按以下條(tiao)件(jian)顯(xian)示出(chu)來(lai)(并寫出(chu)您的(de)思路):

  大于或(huo)(huo)等于 80 表(biao)示優(you)秀,大于或(huo)(huo)等于 60 表(biao)示及格(ge),小于 60 分(fen)表(biao)示不(bu)及格(ge)。

  顯示格式:

  語文

  數學

  英語

  及格

  優秀

  不及格

  答:select

  (case when 語(yu)文>=80 then '優秀'

  when 語文>=60 then '及(ji)格(ge)' else '不及(ji)格(ge)') as 語文,

  (case when 數學(xue)>=80 then '優秀' when 數學(xue)>=60 then '及格'

  else '不及格(ge)') as 數學,

  (case when 英語>=80 then '優秀' when 英語>=60 then '及格'

  else '不及格') as 英語,

  from table

  11、一個日(ri)期(qi)判斷的(de) sql 語句,請取出 tb_send 表(biao)中日(ri)期(qi)(SendTime 字(zi)段(duan)(duan))為(wei)當(dang)天(tian)的(de)所有(you)記錄?(SendTime字(zi)段(duan)(duan)為(wei) datetime 型(xing),包含(han)日(ri)期(qi)與時(shi)間)?

  答:select * from tb where datediff(dd,SendTime,getdate())=0

  12、表中有 A B C 三列(lie)(lie)(lie)(lie)(lie),用(yong) SQL 語句實(shi)現:當(dang) A 列(lie)(lie)(lie)(lie)(lie)大于 B 列(lie)(lie)(lie)(lie)(lie)時選擇(ze)(ze) A 列(lie)(lie)(lie)(lie)(lie)否(fou)則(ze)(ze)選擇(ze)(ze) B 列(lie)(lie)(lie)(lie)(lie),當(dang) B 列(lie)(lie)(lie)(lie)(lie)大于 C 列(lie)(lie)(lie)(lie)(lie)時選擇(ze)(ze) B 列(lie)(lie)(lie)(lie)(lie)否(fou)則(ze)(ze)選擇(ze)(ze) C 列(lie)(lie)(lie)(lie)(lie)。

  答:select (case when a>b then a else b end ), (case when b>c then b esle c end) from table_name

  13、如何(he)提高日志的(de)切換頻率(lv)?

  答:通(tong)過參數 ARCHIVE_LAG_TARGET 可以(yi)控制日志切換的時間(jian)間(jian)隔,以(yi)秒為單位。通(tong)過減少時間(jian)間(jian)隔,從(cong)而實現(xian)提高日志的切換頻率。

  SQL> ALTER SYSTEM SET ARCHIVE_LAG_TARGET=50 SCOPE=both

  14、歸檔(dang)模(mo)式(shi)與非歸檔(dang)模(mo)式(shi)?為什(shen)么歸檔(dang)模(mo)式(shi)可(ke)以恢復到任意時刻?

  答:歸(gui)(gui)(gui)檔(dang)是在(zai)重做(zuo)日志(zhi)文(wen)件(jian)(jian)(jian)被(bei)覆(fu)蓋之前(qian)(qian),將該重做(zuo)日志(zhi)文(wen)件(jian)(jian)(jian)通過復制(zhi)操作(zuo)系統文(wen)件(jian)(jian)(jian)的方式(shi),保存到指定的位(wei)置。保存下來的重做(zuo)日志(zhi)文(wen)件(jian)(jian)(jian)的集合被(bei)稱(cheng)為歸(gui)(gui)(gui)檔(dang)重做(zuo)日志(zhi)文(wen)件(jian)(jian)(jian),復制(zhi)的過程被(bei)稱(cheng)為歸(gui)(gui)(gui)檔(dang)。在(zai) 歸(gui)(gui)(gui) 檔(dang) 日 志(zhi) ( ARCHIVELOG )模(mo)式(shi)下, 數 據 庫 對 重 做(zuo) 日 志(zhi) 文(wen) 件(jian)(jian)(jian) 進(jin) 行 歸(gui)(gui)(gui) 檔(dang) 操 作(zuo) 。 非(fei)(fei) 歸(gui)(gui)(gui) 檔(dang) 日 志(zhi)(NOARCHIVELOG)模(mo)式(shi)下,不(bu)會(hui)對重做(zuo)日志(zhi)文(wen)件(jian)(jian)(jian)進(jin)行歸(gui)(gui)(gui)檔(dang)操作(zuo)。由(you)于非(fei)(fei)歸(gui)(gui)(gui)檔(dang)模(mo)式(shi)不(bu)會(hui)在(zai)覆(fu)蓋之前(qian)(qian)保存, 這樣就(jiu)造(zao)成(cheng)了數據庫在(zai)一定時間之前(qian)(qian)的重做(zuo)日志(zhi)文(wen)件(jian)(jian)(jian)丟失,也(ye)就(jiu)不(bu)能恢復到被(bei)覆(fu)蓋之前(qian)(qian)。而歸(gui)(gui)(gui)檔(dang)模(mo)式(shi)在(zai)任意時間上都有重做(zuo)日志(zhi)文(wen)件(jian)(jian)(jian),故(gu)可以恢復到任意時刻。

  15、觸發器中能否用 COMMIT,為什么?

  答:在觸(chu)(chu)發器(qi)中不(bu)能使用COMMIT等事務控制語(yu)句(ju)。因為觸(chu)(chu)發器(qi)是(shi)事務觸(chu)(chu)發的(de)如果有事務控制語(yu)句(ju)就會影響(xiang)到(dao)觸(chu)(chu)發它(ta)(ta)的(de)事務。即連帶觸(chu)(chu)發它(ta)(ta)的(de)語(yu)句(ju)之前的(de)已(yi)經(jing)完成的(de)沒有提(ti)交的(de)語(yu)句(ju)都要受到(dao)影響(xiang)。這是(shi)會影響(xiang)到(dao)數(shu)據的(de)一致性的(de)。

  16、你對游標(biao)的(de)理解,游標(biao)的(de)分類?

  答:游標是結(jie)果(guo)集數(shu)據中(zhong)的(de)指針,作用是為(wei)遍歷結(jie)果(guo)集時(shi),存儲每(mei)條(tiao)記(ji)錄的(de)結(jie)果(guo)。游標分(fen)為(wei)顯式游標和隱式游標。

  17、如何設置網絡數據(ju)包的大小(xiao)?

  答:一(yi)(yi)般(ban)情況(kuang)下(xia),設置網絡數(shu)據包的大(da)(da)小(xiao)可(ke)參(can)考以下(xia)方法。如(ru)果應用程序(xu)常(chang)執行大(da)(da)容量(liang)復制操作或者是發送、接(jie)收大(da)(da)量(liang)的text 和image 數(shu)據的話(hua),可(ke)以將(jiang)此值設大(da)(da)一(yi)(yi)點。如(ru)果應用程序(xu)接(jie)收和發送的信息量(liang)都很(hen)小(xiao),那么可(ke)以將(jiang)其設為512 字(zi)節。

  18、談(tan)談(tan)你對事務的(de)理解?

  答:事(shi)務(wu)(wu)(wu)從COMMIT、ROLLBACK、連接到(dao)數(shu)據庫(ku)(ku)或(huo)(huo)開(kai)始(shi)第一(yi)(yi)條(tiao)可(ke)執(zhi)行的(de)(de)(de)SQL語(yu)(yu)句(ju)(ju)時開(kai)始(shi),到(dao)一(yi)(yi)條(tiao)COMMIT、ROLLBACK語(yu)(yu)句(ju)(ju)或(huo)(huo)退(tui)(tui)出數(shu)據庫(ku)(ku)時結束。如(ru)(ru)果在(zai)(zai)(zai)一(yi)(yi)個(ge)(ge)(ge)(ge)(ge)事(shi)務(wu)(wu)(wu)中包含DDL語(yu)(yu)句(ju)(ju),則在(zai)(zai)(zai)DDL語(yu)(yu)句(ju)(ju)的(de)(de)(de)前后都(dou)會(hui)隱含地執(zhi)行COMMIT 語(yu)(yu)句(ju)(ju),從而(er)(er)開(kai)始(shi)或(huo)(huo)結束一(yi)(yi)個(ge)(ge)(ge)(ge)(ge)事(shi)務(wu)(wu)(wu)。如(ru)(ru)果一(yi)(yi)個(ge)(ge)(ge)(ge)(ge)事(shi)務(wu)(wu)(wu)由于某些(xie)故障或(huo)(huo)者(zhe)由于用(yong)戶改變主(zhu)意而(er)(er)必須在(zai)(zai)(zai)提(ti)交前取消(xiao)它,則數(shu)據庫(ku)(ku)被(bei)(bei)恢復到(dao)這些(xie)語(yu)(yu)句(ju)(ju)和過程執(zhi)行之前的(de)(de)(de)狀(zhuang)態。利用(yong)ROLLBACK 語(yu)(yu)句(ju)(ju)可(ke)以在(zai)(zai)(zai)COMMIT 命令前隨時撤消(xiao)或(huo)(huo)回(hui)(hui)(hui)退(tui)(tui)一(yi)(yi)個(ge)(ge)(ge)(ge)(ge)事(shi)務(wu)(wu)(wu)。可(ke)以回(hui)(hui)(hui)退(tui)(tui)整個(ge)(ge)(ge)(ge)(ge)事(shi)務(wu)(wu)(wu),也可(ke)以回(hui)(hui)(hui)退(tui)(tui)部分事(shi)務(wu)(wu)(wu),但(dan)是(shi)不(bu)能回(hui)(hui)(hui)退(tui)(tui)一(yi)(yi)個(ge)(ge)(ge)(ge)(ge)已(yi)經被(bei)(bei)提(ti)交的(de)(de)(de)事(shi)務(wu)(wu)(wu)。回(hui)(hui)(hui)退(tui)(tui)部分事(shi)務(wu)(wu)(wu)的(de)(de)(de) ROLLBACK 命令為:ROLLBACK to savepoint 存儲(chu)點名(ming),存儲(chu)點是(shi)用(yong)戶放(fang)入事(shi)務(wu)(wu)(wu)中的(de)(de)(de)標記,用(yong)來表示(shi)一(yi)(yi)個(ge)(ge)(ge)(ge)(ge)可(ke)被(bei)(bei)回(hui)(hui)(hui)退(tui)(tui)的(de)(de)(de)位置。存儲(chu)點通(tong)過在(zai)(zai)(zai)事(shi)務(wu)(wu)(wu)中放(fang)入一(yi)(yi)個(ge)(ge)(ge)(ge)(ge)SAVEPOINT 命令而(er)(er)被(bei)(bei)插入。該命令的(de)(de)(de)語(yu)(yu)法是(shi):SAVEPOINT 存儲(chu)點名(ming),如(ru)(ru)果在(zai)(zai)(zai) ROLLBACK 語(yu)(yu)句(ju)(ju)中沒有給出存儲(chu)點名(ming),則整個(ge)(ge)(ge)(ge)(ge)事(shi)務(wu)(wu)(wu)被(bei)(bei)回(hui)(hui)(hui)退(tui)(tui)。

  19、談談你對索引(yin)的理解?

  答(da):索引(yin)是若干數(shu)(shu)據行(xing)的關(guan)鍵字的列(lie)表,查(cha)詢數(shu)(shu)據時,通過(guo)索引(yin)中(zhong)的關(guan)鍵字可以快速定位到要訪(fang)問的 記錄所在的數(shu)(shu)據塊(kuai),從而大(da)大(da)減少(shao)讀取數(shu)(shu)據塊(kuai)的 I/O 次數(shu)(shu),因此可以顯著提(ti)高性能。

  20、事務和鎖有什(shen)么關系(xi)?

  答:可以(yi)使用多種機制來確保數據的(de)完整性,例(li)如約束、觸發器以(yi)及事(shi)(shi)務(wu)和鎖(suo)等(deng)。事(shi)(shi)務(wu)和 鎖(suo)的(de)關系非常緊(jin)密。事(shi)(shi)務(wu)包含(han)一系列的(de)操(cao)作,這些操(cao)作要么(me)全(quan)部成(cheng)(cheng)功,要么(me)全(quan)部失敗,通(tong)過事(shi)(shi)務(wu)機制管理多個(ge)事(shi)(shi)務(wu),保證事(shi)(shi)務(wu)的(de)一致性,事(shi)(shi)務(wu)中使用鎖(suo)保護指定的(de)資(zi)源,防止其他(ta)用戶修改另外一個(ge)還(huan)沒有完成(cheng)(cheng)的(de)事(shi)(shi)務(wu)中的(de)數據。

  21、本地索引(yin)與全(quan)局(ju)索引(yin)的差別與適用情況。

  答:對(dui)于本地(di)索(suo)(suo)引(yin),每一個表分(fen)(fen)區(qu)(qu)(qu)對(dui)應一個索(suo)(suo)引(yin)分(fen)(fen)區(qu)(qu)(qu),當表的(de)分(fen)(fen)區(qu)(qu)(qu)發(fa)生(sheng)變化時,索(suo)(suo)引(yin)的(de)維護(hu)(hu)由數據庫 自動(dong)進行。對(dui)于全局索(suo)(suo)引(yin),可以(yi)(yi)選擇是否(fou)分(fen)(fen)區(qu)(qu)(qu),而(er)且索(suo)(suo)引(yin)的(de)分(fen)(fen)區(qu)(qu)(qu)可以(yi)(yi)不與表分(fen)(fen)區(qu)(qu)(qu)相(xiang)對(dui)應。當對(dui)分(fen)(fen)區(qu)(qu)(qu)進行維 護(hu)(hu)操作(zuo)(zuo)時,通常會(hui)導致全局索(suo)(suo)引(yin)的(de) INVALDED,必須在執行完操作(zuo)(zuo)后 REBUILD。

  22、插入(ru)記錄時可以不指定字段名稱嗎?

  答:不(bu)管(guan)使用哪種 INSERT 語法,都(dou)必須(xu)給出(chu) VALUES 的正確數目。如(ru)(ru)果(guo)不(bu)提(ti)供字段名,則必須(xu)給 每個(ge)字段提(ti)供一(yi)個(ge)值,否則將產生一(yi)條(tiao)(tiao)錯誤消息。如(ru)(ru)果(guo)要(yao)在 INSERT 操作中(zhong)省略某(mou)些(xie)字段,這些(xie)字段需要(yao) 滿足一(yi)定(ding)條(tiao)(tiao)件:該(gai)列定(ding)義為允許空值;或者表定(ding)義時(shi)給出(chu)默認值,如(ru)(ru)果(guo)不(bu)給出(chu)值,將使用默認值。

  23、delete、truncate 和 drop 的區(qu)別(bie)?

  答:Delete 命令(ling)用來刪除表的(de)全(quan)部(bu)或(huo)者一部(bu)分(fen)數據行,執(zhi)行 delete 之后,用戶需要提交(commmit)或(huo)者 回滾(gun)(rollback) transaction 來執(zhi)行刪除或(huo)者撤(che)銷刪除,delete 命令(ling)會觸(chu)發(fa)這個表上所(suo)有的(de) delete 觸(chu)發(fa)器。

  Truncate 刪除表中(zhong)的(de)所有數據,這個(ge)操(cao)作不(bu)能回滾,也不(bu)會(hui)觸(chu)發(fa)這個(ge)表上的(de)觸(chu)發(fa)器,truncate 比(bi) delete更快,占用的(de)空間更小。

  Drop 命令(ling)從(cong)數據庫中刪除表,所有的數據行,索(suo)引和權限也會(hui)被刪除,所有的DML觸發器(qi)也不會(hui)被觸發,這個命令(ling)也不能回滾。

  24、為什么 group by 和 order by 會(hui)使查詢(xun)變慢?

  答:group by 和 order by 操作(zuo)通(tong)常需要創(chuang)建一個臨(lin)時表來(lai)處理查(cha)詢(xun)的(de)結(jie)果,所以(yi)如果查(cha)詢(xun)結(jie)果很多的(de) 話(hua)會(hui)嚴(yan)重影響性(xing)能。

  25、簡述數(shu)據庫(ku)的設計過(guo)程。

  答:數據庫設(she)計分為以下五個階段(duan):

  需求(qiu)分析(xi):主要是(shi)準確收(shou)集用戶信息(xi)需求(qiu)和(he)處理(li)(li)需求(qiu),并對收(shou)集的結果進行整(zheng)理(li)(li)和(he)分析(xi),形成需求(qiu)說明。

  概念結構設計:對用(yong)戶需求進行(xing)綜合、歸(gui)納、抽象,形成一(yi)個與(yu)與(yu)具(ju)體的(de) DBMS 無關概念模(mo)型(一(yi)般為(wei)ER模(mo)型)。

  邏輯(ji)結(jie)構設(she)計:將概(gai)念結(jie)構設(she)計的概(gai)念模型轉化為某個特定(ding)的 DBMS 所支持的數據(ju)模型,建立數據(ju)庫邏輯(ji)模式,并對(dui)其進行優化,同時(shi)為各(ge)種用戶和應用設(she)計外(wai)模式。

  物理結構設(she)計:為設(she)計好的邏輯模型(xing)選擇(ze)物理結構,包括存儲(chu)結構和存取方法等(deng),建立數(shu)據庫物理模式。

  實(shi)施和維(wei)護:實(shi)施就(jiu)是(shi)使用DLL語言(yan)建立(li)數據(ju)(ju)(ju)庫模式(shi),將(jiang)實(shi)際數據(ju)(ju)(ju)載(zai)入數據(ju)(ju)(ju)庫,建立(li)真正(zheng)的(de)數據(ju)(ju)(ju)庫。維(wei)護階段是(shi)對(dui)運行(xing)(xing)中(zhong)的(de)數據(ju)(ju)(ju)庫進行(xing)(xing)評(ping)價、調整和修改。