天天看點

實習生正常技術面試題(資料庫)

目錄

1.觸發器的作用?

2.什麼是存儲過程?用什麼來調用?

3.索引的作用?和它的優點缺點是什麼?。

4.主鍵和索引的差別?

5.什麼是記憶體洩漏?

6.維護資料庫的完整性和一緻性,你喜歡用觸發器還是自寫業務邏輯?為什麼?

7.什麼是事務?

8.什麼是鎖?

9.什麼叫視圖?

10.視圖建立和使用文法?

11.遊标是什麼?

12.NULL是什麼意思?

13.什麼是主鍵?

14.什麼是外鍵?

15.您如何確定一個帶有名為Fld1字段的TableB表格裡隻具有Fld1字段裡的那些值,而這些值同時在名為TableA的表格的Fld1字段裡?

16.概述存儲過程及其優缺點。

17.什麼是相關子查詢?如何使用這些查詢?

18.什麼是SQL注入式攻擊?

19.如何防範SQL注入式攻擊?

20.預設的系統資料庫有哪些?

21.預設建立一個資料庫,會生成哪些檔案?

22.建立資料庫時,能不能把資料檔案和日志檔案分開?

23.什麼是索引覆寫(Index Covering)查詢?

24.存儲過程和觸發器的差別?

25.存儲過程和函數的差別?

26.聚集索引和非聚集索引差別 

27.索引的優缺點,什麼時候使用索引,什麼時候不能使用索引?

28.資料庫的優化

29.資料庫的主從複制 

30.資料庫連接配接池的作用 

31.分庫分表,主從複制,讀寫分離 

32.資料庫三範式 

33.資料庫中join的inner join, outer join, cross join 

34.死鎖怎麼解決 

35.mysql資料庫中常用的聚合函數有哪些?

觸發器是一個特殊的存儲過程,主要是通過事件來觸發而被執行的。它可以強化限制,來維護資料的完整性和一緻性,可以跟蹤資料庫内的操作進而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的資料操作,而該操作又會導緻該表觸發器被觸發。

存儲過程是一個預編譯的SQL語句,優點是允許子產品化的設計,就是說隻需建立一次,以後在程式中就可以調用多次。如果某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。可以用一個“execute 存儲過程名 參數”指令來調用存儲過程。

索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書内容就可以找到想要的資料。索引可以是唯一的,建立索引允許指定單個列或者是多個列。缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小。

1.主鍵時為了辨別資料庫記錄唯一性,不允許記錄重複,且鍵值不能為空,主鍵也是一個特殊索引; 

2.資料表中隻允許有一個主鍵,但是可以有多個索引; 

3.使用主鍵資料庫會自動建立主索引,也可以在非主鍵上建立索引,友善查詢效率; 

4.索引可以提高查詢速度,它就相當于字典的目錄,可以通過它很快查詢到想要的結果,而不需要進行全表掃描; 

5.唯一索引則辨別該索引值唯一,可以由一個或幾個字段組成,一個表可以有多個唯一索引。

一般我們所說的記憶體洩漏指的是堆記憶體的洩漏。當應用程式用關鍵字new等建立對象時,就從堆中為它配置設定一塊記憶體,使用完後由于某種原因程式未釋放或無法釋放,造成系統記憶體的浪費。導緻程式運作速度減慢甚至系統崩潰等嚴重後果。

我是這樣做的,盡可能使用限制,如check,主鍵,外鍵,非空字段等來限制,這樣做效率最高,也最友善。其次是使用觸發器,這種方法可以保證,無論什麼業務系統通路資料庫都可以保證資料的完整新和一緻性。最後考慮的是自寫業務邏輯,但這樣做麻煩,程式設計複雜,效率低下。

事務就是被綁定在一起作為一個邏輯工作單元的SQL語句組,如果任何一個語句操作失敗那麼整個操作就被失敗,進而復原到操作前狀态,或者是上個節點。為了確定要麼執行,要麼不執行,就可以使用事務。要将一組語句作為事務考慮,就需要通過ACID測試,即原子性,一緻性,隔離性和持久性。

在所有的DBMS中,鎖是實作事務的關鍵,鎖可以保證事務的完整性和并發性。與現實生活中鎖一樣,它可以使某些資料的擁有者,在某段時間内不能使用某些資料或資料結構。當然鎖還分級别的。

視圖是一種虛拟的表,具有和實體表相同的功能。可以對視圖進行增,改,查,操作,視圖通常是由一個表或者多個表的行或列的子集。它使得我們擷取資料更容易,相比多表查詢。

1.首先判斷是否存在 

if exists (select * from sysobjects where name = '視圖名')

drop view View_EdsProd 

Go

2.    建立視圖

create view View_EdsProd as select * from Tab_EdsProd where Mid>1(條件) go

3.    使用視圖

select *from View_EdsProd

遊标是SQL 的一種資料通路機制。可以将遊标簡單的看成是查詢的結果集的一個指針,可以根據需要在結果集上面來復原動,浏覽需要的資料。

NULL(空)這個值表示UNKNOWN(未知):它不表示“”(空字元串)。不能把任何值與一個 UNKNOWN值進行比較,都會生産一個NULL值。您必須使用IS NULL操作符。

主鍵是表格裡的(一個或多個)字段,隻用來定義表格裡的行;主鍵裡的值總是唯一的。

外鍵是一個用來建立兩個表格之間關系的限制。這種關系一般都涉及一個表格裡的主鍵字段與另外一個表格(可能是同一個表格)裡的一系列相連的字段。那麼這些相連的字段就是外鍵。

第一個答案是使用外鍵限制。外鍵限制用來維護引用的完整性。它被用來確定表格裡的字段隻允許有已經在另一表格裡的某個字段裡定義了的值。通常是另外一個表格的主鍵。

另外一種答案是觸發器。觸發器可以被用來保證以另外一種方式實作與限制相同的作用,但是它非常難設定與維護,而且性能一般都很糟糕。

存儲過程是一個預編譯的sql語句 ,編譯後可多次使用

優勢:響應時間上來說有優勢,可以給我們帶來運作效率提高的好處,且使用存儲過程的系統更加穩定

缺點:維護性較差,相對于簡單sql,存儲過程并沒有什麼優勢,并且在進行調試時比較困難

相關子查詢是一種包含子查詢的特殊類型的查詢。查詢裡包含的子查詢會請求外部查詢的值,進而形成一個類似于循環的狀況。

所謂SQL注入式攻擊,就是攻擊者把SQL指令插入到Web表單的輸入域或頁面請求的查詢字元串,欺騙伺服器執行惡意的SQL指令。比如:攻擊者在使用者名字和密碼輸入框中輸入"'或'1'='1"之類的内容。最後得到的SQL指令可能變成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。這時,已經不能真正驗證使用者身份,是以系統會錯誤地授權給攻擊者。

隻要在利用表單輸入的内容構造SQL指令之前,把所有輸入内容過濾一番就可以了。過濾輸入内容可以按多種方式進行。

⑴ 對于動态構造SQL查詢的場合,可以使用下面的技術:

第一:替換單引号,即把所有單獨出現的單引号改成兩個單引号,防止攻擊者修改SQL指令的含義。

第二:删除使用者輸入内容中的所有連字元。

第三:對于用來執行查詢的資料庫帳戶,限制其權限。

⑵ 用存儲過程來執行所有的查詢。

⑶ 限制表單或查詢字元串輸入的長度。

⑷ 檢查使用者輸入的合法性,确信輸入的内容隻包含合法的資料。

⑸ 将使用者登入名稱、密碼等資料加密儲存。

⑹ 檢查提取資料的查詢所傳回的記錄數量。

1)master資料庫(主);2)tempdb資料庫(臨時);3)model 資料庫(模闆);4)msdb資料庫(計劃任務);

1)主檔案(.mdf),2)日志檔案(.ldf),無次要檔案(.ndf)。

可以分開,起到優化作用。把資料檔案放到高速讀寫區,把日志檔案放到低速讀寫區。

索引覆寫(Index Covering)查詢是指資料可以隻通過索引擷取,而不用接觸表。

 觸發器與存儲過程的主要差別在于觸發器的運作方式。存儲過程必須有使用者、應用程式或者觸發器來顯示的調用并執行,而觸發器是當特定時間出現的時候,自動執行或者激活的,與連接配接用資料庫中的使用者、或者應用程式無關

存儲過程是使用者定義的一系列SQL語句的集合,,而函數通常是資料庫已定義的方法,具體差別如下: 

  1.對于存儲過程來說可以傳回參數,而函數隻能傳回值或者表對象. 

  2.函數必須有傳回值,存儲過程可有可無 

  3.存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一部分來調用.

聚集索引,資料按索引順序存儲,中子結點存儲真實的實體資料 

非聚集索引,存儲指向真正資料行的指針 

索引最大的好處是提高查詢速度, 

缺點是更新資料時效率低,因為要同時更新索引 

對資料進行頻繁查詢進建立索引,如果要頻繁更改資料不建議使用索引。

1.建立适當的索引 

2.對sql語句優化 

3、使用exists或not exists代替in或not in

4、使用存儲過程    

5、用union替換or(适用于索引列) 

6、where代替having,having 檢索完所有記錄,才進行過濾 

7、使用select top或set rowcount來限制操作的行

8、避免嵌套查詢 

9、對多個字段進行等值查詢時,聯合索引

預設異步複制,容易造成主庫資料和從庫不一緻 

一個資料庫為Master,一個資料庫為slave,通過Binlog日志來實作

slave兩個線程,一個線程去讀master binlog日志,寫到自己的中繼日志 

一個線程解析日志,執行sql 

master啟動一個線程,給slave傳遞binlog日志

半同步複制 

隻有把master發送的binlog日志寫到slave的中繼日志,這時主庫才傳回操作完成的回報,性能有一定降低

并行複制 

slave 多個線程去請求binlog日志

維護一定數量的連接配接,減少建立連接配接的時間 

更快的響應時間 

統一的管理

讀寫分離,讀從庫,寫主庫 

spring配置兩個資料庫,通過AOP(面向切面程式設計),在寫或讀方法前面進行判斷得到動态切換資料源。

1NF 屬性不可分 

2NF 非主鍵屬性,完全依賴于主鍵屬性 

3NF 非主鍵屬性無傳遞依賴

以A,B兩張表為例 A left join B 

選出A的所有記錄,B表中沒有的以null 代替 

right join 同理

inner join 

A,B的所有記錄都選出,沒有的記錄以null代替

cross join (笛卡爾積) 

A中的每一條記錄和B中的每一條記錄生成一條記錄 

例如A中有4條,B中有4條,cross join 就有16條記錄

讀取,不能修改、不能删除。

找到程序号,kill 程序

産生死鎖的原因:

一是系統提供的資源數量有限,不能滿足每個程序的使用;二是多道程式運作時,程序推進順序不合理。

産生死鎖的必要條件是:

1、互斥條件;

2、不可剝奪條件(不可搶占);

3、部分配置設定;

4、循環等待。

根據産生死鎖的四個必要條件,隻要使其中之一不能成立,死鎖就不會出現。為此,可以采取下列三種預防措施: 

1、采用資源靜态配置設定政策,破壞"部分配置設定"條件; 

2、允許程序剝奪使用其他程序占有的資源,進而破壞"不可剝奪"條件; 

3、采用資源有序配置設定法,破壞"環路"條件。

解除死鎖常常采用下面兩種方法:1、資源剝奪法;2、撤消程序法

Max(),Avg(),Count(),Min(),Sum()。

中文:最大值,平均值,資料條數,最小值,總和。

36.資料庫主鍵、外鍵、限制、索引的作用是什麼?有幾種連表查詢方式?

主鍵、外鍵及限制的作用:保證資料的完整性

索引的作用:索引是一個資料結構,用來快速通路資料庫表格或者視圖裡的資料,加快資料庫的搜尋引擎對資料的檢索效率

方式:左連接配接、右連接配接、内連接配接、全連接配接

本文來自部落格園,作者:明金同學,轉載請注明原文連結:https://www.cnblogs.com/vmuu/p/15663299.html

公衆号:【明金同學】