SQL數(shù)據(jù)庫面試題_第1頁
SQL數(shù)據(jù)庫面試題_第2頁
SQL數(shù)據(jù)庫面試題_第3頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、SQL數(shù)據(jù)庫面試題1、SQLSREVE中,向一個表中插入了新數(shù)據(jù),如何快捷的得到自增量字段的當前值這種情況其實我們經(jīng)常用到,比如我們新建了一個用戶,建立完用戶后我們希望馬上得到這個新用戶的 ID,因為我們一般都是把這種用戶ID的字段設置成自增長類型的,乍看起來好像沒有要得到那個新 ID 很麻煩,其 實 sql server 內(nèi)置了一些全局的變量,使我們很容易就得 到那個新的自 增字段的ID,就是使用IDENTITY在 一 條 INSERT、 SELECTINTO 或 大 容 量 復 制 語 句 完 成 后 ,IDENTIT Y中包含語句生成的最后一個標識值。如果語句未影響任何包含標識列的表,則

2、 IDENTITY返回NULLo如果插入了多個行,生成 了多個標識值,則IDENTITY將返回最后生成的標識值。女口果語句觸發(fā)了一個或多個觸發(fā)器,該觸發(fā)器又執(zhí)行了生成標識值的插入操作,那么,在語句執(zhí)行后立即調(diào)用 IDENTITY將返回觸發(fā)器生成的最后一個 標識值。在具體應用中可以這樣來寫 SQL語句:stringstrSql="INSERTINTOUser (Na me, Login Name, Pwd,RegTime,lsSuper, Remark)" +"VALUES(Name,LoginName,Pwd,RegTime,lsSuper,Remark);s e

3、lect ID ENTITY;"執(zhí)行的時候直接用comma nd.ExecuteScalar(就可以了,能直接返回該條記錄的 UserID;解答二:經(jīng)過實驗,得如下結論:select DISTINCT IDENTITY as iden from FaWen解釋:上述語句對 SQLSERVE的一個會話,也就是一條連接,返回該連接最后一條插入記錄得到的自增字段的值。假設有3個程序,分別連接 SQLSERVE有三個連接。3個程序都向 同一 個表依順序插入數(shù)據(jù),得到的值分別是 1、2、 3,那么,只要 3 個程序?qū)?SQL的連接還保持著,第一個程序使用上述語句,將得到 1,而不是3,第 二個

4、程序?qū)⒌玫?2,也不是 3。第三個程序得到 3。因此,用上述語句可以得到自己剛才插入記錄的自增字段的值,不怕其它程序的并發(fā)插入操作。上述語句中,使用 DISTINCT勺原因是,雖然返回的值是當前連接 插入操 作得到的最大值,但返回的相同值的記錄有多條。條數(shù)等于當前多個連接一共插入的記錄數(shù)。實驗方法:啟動三個 Query analyzer 查詢分析器,分別執(zhí)行插入操作 后 再做上述取自增字段值的操作我利用rs.addnew增加一條記錄時,如何同時獲取自增 1 字段 ID 的當前值,而無須 再進 行一次查詢來獲??!因為我立即要用到該 ID 值,如果在增加記 錄完畢后 再利用 select id 進

5、行一次查詢無疑會使系統(tǒng)受限,有辦法嗎?如果你能保證數(shù)的話可以用rs.moveend ,當指針在最后一條記錄時 count 是全部行數(shù)rs.count2、什么叫做SQL注入,如何防止?請舉例說明SQL注入就是在正常的 SQL執(zhí)行語句中惡意插入攻擊者想要運行的sql語句,比如,我們有一個方法是這么寫的:public static bool Login(string loginName,string pwd)string strSql = string.Format("select * from User where LoginName = '0' and Pwd = &#

6、39;I' ",loginName,pwd);如果我傳給 loginname 的值是, or 1=1-, 那么這個 sql 語句成了 select * from User where LoginName = " or 1=1-', 這樣不管我密碼輸入什 么, 肯定都是符合條件的。當然這只是最簡單的情況,如果我把loginname的值改成or l=l;delete from user-,那么后果不堪設想,如果我通過sql來執(zhí)行net use相關的命令,就可能在服務器上給自己加一個帳號,這樣就逐步可以控制整個數(shù)據(jù)庫所在的服務器。-這就是sql注入的通常方法和可能

7、的損害。要放置其實也很簡單,可以通過至少兩個方法來進行:1. 最根本的,不實用組合 sql的方法,而是通過使用命令參數(shù)方式來執(zhí)行命令,比如我們把 sql改成這種方式:stri ng strSql = "select * from user where Log inN ame =Log inN ame and Pwd =Pwd,然后通過sqlcommand來執(zhí)行它,就可以從根本上解決這個問題。2. 控制參數(shù)的長度。因為要想進行 sql注入的話,需要一定長度的字符串才能執(zhí)行,如果我們規(guī)定LoginName的長度最長不超過8個,一般不會造成損害,當然這個只是在特殊的情況下才使用,比如有些情

8、況可能不能使用命令參數(shù)方式。點評:sql注入是我們編程時必須考慮的問題,特別是 BS的程序,更是要嚴 格 檢查是否有sql注入的漏洞。最關鍵的一點是,你要明白怎么解決這個問題,一般面試人員會希望你提高使用參數(shù)方式來防止注入。3. 游標的作用?如何知道游標已經(jīng)到了最后?關系數(shù)據(jù)庫中的操作會對整個行集起作用。由 SELECT句返回的行 集包 括滿足該語句的 WHERE子句中條件的所有行。這種由語句返回的完整行集稱為結果集。應用程序,特別是交互式聯(lián)機應用程序,并不總能將整個結果集作為一個單元來有效地處理。這些應用程序需要一種機制以便每次處理一行或一部分行。游標就是提供這種機制的對結果集的一種擴展。游

9、標的特點是: 允許定位在結果集的特定行。 從結果集的當前位置檢索一行或一部分行。 支持對結果集中當前位置的行進行數(shù)據(jù)修改。 為由其他用戶對顯示在結果集中的數(shù)據(jù)庫數(shù)據(jù)所做的更改提供不同 級別 的可見性支持。提供腳本、存儲過程和觸發(fā)器中用于訪問結果集中的數(shù)據(jù)的Tran sact-SQL語句在從游標中提取信息后,可以通過判斷 FETCH_STATU的值來判斷 是否到了最后。當 FETCH_STATU為0的時候,說明提取是成功 的, 否則就可以認為到了最后。點評:游標是進行數(shù)據(jù)庫操作的一個重要概念,但是在現(xiàn)代的軟件開發(fā)中應用的不是很多,只有在一些特殊的存儲過程中才會應用。但是,畢竟這是一個很重要,也是

10、我們必須掌握的概念,最好能理解它的原理和 用法。4> SQLServe的兩種索引是何形式?索引的作用?索引的優(yōu)缺點?sql server的索引分為聚集索引和非聚集索引,下面分別說明:弓I聚集蚤引根據(jù)數(shù)據(jù)行的鍵值在表或視圖中排序和存儲這些數(shù)據(jù)行。索引定義中包含聚集索引列。每個表只能有一個聚集索引,因為數(shù)據(jù)行本身只能按一個順序排序。只有當表包含聚集索引時,表中的數(shù)據(jù)行才按排序順序存儲。如果表具有聚集索引,則該表稱為聚集表。如果表沒有聚集索引,則其數(shù)據(jù)行存儲在一個稱為堆的無序結構中。非聚集索弓 I 非聚集蚤引具有獨立于數(shù)據(jù)行的結構。非聚集索引包含非聚集索引鍵值,并且每個鍵值項都有指向包含該鍵值

11、的數(shù)據(jù)行的指針。從非聚集索引中的索引行指向數(shù)據(jù)行的指針稱為行定位器。行定位器的結構取決于數(shù)據(jù)頁是存儲在堆中還是聚集表中。對于堆,行定位器是指向行的指針。對于聚集表,行定位器是聚集索引鍵。索引的作用主要是為了在查詢時提高查詢的效率,并且盡量減小更新時的開銷。優(yōu)點: 設計良好的索引查詢效率可以得到極大的提高,某些情況下甚至可以 提 高幾百上千倍。缺點:需要占用額外的空間和資源。在更新時耗費的時間更大,因為對數(shù)據(jù) 的 更新很有可能會導致索引的更新,這樣就會導致增加系統(tǒng)開銷。點評:在所有的進行系統(tǒng)優(yōu)化的選擇中,索引都是第一位的,一個設計良好 的 數(shù)據(jù)庫肯定需要高超的索引設計技巧,在這方面效率提高不是一

12、倍兩倍的問題,而是可能會有質(zhì)的飛躍,對索引優(yōu)化的重要性,在一個大型項目里,怎么說都不為過。但是,索引優(yōu)化又是比較困難的,哪些列需要加入索引,列的順序怎樣,哪個索引需要設置為聚集索引等等,都是我們必須要考慮的問題。5、事務是什么?事務是單個的工作單元。如果某一事務成功,則在該事務中進行的所 有數(shù)據(jù)修改均會提交,成為數(shù)據(jù)庫中的永久組成部分。如果事務遇到錯誤且必須取消或回滾,則所有數(shù)據(jù)修改均被清除。也就是說,事務是由一系列的 “原子 ”操作組成的,這些原子操作必 須全部完成,否則所有的動作都會被取消并恢復到初始狀態(tài)。開始事務使用 BEGINTRANSACTIOr語句顯,以 COMMIT或ROLLBACK 語句結束。以上是針對數(shù)據(jù)庫來說的。但是,事務不僅僅限于數(shù)據(jù)庫,數(shù)據(jù)庫以外的動作也可以被組合進事務中,一般稱為 “ 企業(yè)級事務 ”。舉一個例子:我們有這兩個操作必 須都 完成,即在向數(shù)據(jù)庫插入一條記錄后必須在硬盤的某個文件夾內(nèi) 創(chuàng)建一 個文件,這個就是一個企業(yè)級事務,它超出了簡單的數(shù)據(jù)庫事務的范疇。我們可以通過編程來實現(xiàn)企業(yè)級事務。點評:事務是數(shù)據(jù)庫開發(fā)中一個非常重要的概念,它對與保證數(shù)據(jù)庫的完整 性 和一致性非常重要。對于事務的的C#弋碼實現(xiàn)更是務必要熟練掌 握。6、存儲過程和函數(shù)的區(qū)別存儲過程,功能強大,可以執(zhí)行包括修改表等一系列數(shù)據(jù)庫操作,也可以創(chuàng)建為SQL S

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論