數據庫面試

數據庫知識點

是否瞭解內存數據庫?

顧名思義就是將數據放在內存中直接操作的數據庫。

相對於磁盤(傳統的數據庫管理系統把所有數據都放在磁盤上進行管理,所以稱做磁盤數據庫)

內存的數據讀寫速度要高出幾個數量級,因此內存數據庫的最大特點就是性能好,速度快。

由於內存在系統中是稀缺的資源,因此內存數據庫的容量大小受物理內存的限制,而內存數據庫也會被要求根據靈活的策略與磁盤數據庫進行數據同步。安全性的問題可以說是內存數據庫最大的硬傷。

因爲內存本身有掉電丟失的天然缺陷。因此我們在使用內存數據庫的時候,

通常需要,提前對內存上的數據採取一些保護機制,比如備份,記錄日誌,熱備或集羣,與磁盤數據庫同步等方式。

內存數據庫做爲優秀內存數據庫完全可以單獨使用,並做好容災以及擴展等。電信行業普遍在用。

1、觸發器的作用?

答:觸發器是一中特殊的存儲過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護數據的完整性和一致性,

可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的數據操作,而該操作又會導致該表觸發器被觸發。

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

答:存儲過程是一個預編譯的SQL語句,優點是允許模塊化的設計,就是說只需創建一次,以後在該程序中就可以調用多次。

如果某次操作需要執行多次SQL,使用存儲過程比單純SQL語句執行要快。可以用一個命令對象來調用存儲過程。

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

答:索引就一種特殊的查詢表,數據庫的搜索引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。

索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了數據庫的尺寸大小。

4、什麼是內存泄漏?

答:一般我們所說的內存泄漏指的是堆內存的泄漏。堆內存是程序從堆中爲其分配的,大小任意的,使用完後要顯示釋放內存。

當應用程序用關鍵字new等創建對象時,就從堆中爲它分配一塊內存,使用完後程序調用free或者delete釋放該內存,否則就說該內存就不能被使用,我們就說該內存被泄漏了。

5、維護數據庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?爲什麼?

答:我是這樣做的,儘可能使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什麼業務系統訪問數據庫都可以保證數據的完整新和一致性。最後考慮的是自寫業務邏輯,但這樣做麻煩,編程複雜,效率低下。

6、什麼是事務?什麼是鎖?

答:事務就是被綁定在一起作爲一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。爲了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作爲事務考慮,

就需要通過ACID測試,即原子性,一致性,隔離性和持久性。鎖:在DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和併發性。與現實生活中鎖一樣,它可以使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。當然鎖還分級別的。

7、什麼叫視圖?遊標是什麼?

答:視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,視圖通常是有一個表或者多個表的行或列的子集。

對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。

遊標:是對查詢出來的結果集作爲一個單元來有效的處理。遊標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。

可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理數據的時候,遊標顯得十分重要。

8.說說分庫與分表設計

對於訪問極爲頻繁且數據量巨大的單表來說,我們首先要做的就是減少單表的記錄條數,以便減少數據查詢所需要的時間,提高數據庫的吞吐,這就是所謂的分表!

面對高併發的讀寫訪問,對數據庫進行拆分,從而提高數據庫寫入能力,這就是所謂的分庫!

場景:有時數據庫可能既面臨着高併發訪問的壓力,又需要面對海量數據的存儲問題,這時需要對數據庫既採用分表策略,又採用分庫策略,以便同時擴展系統的併發處理能力,以及提升單表的查詢性能,這就是所謂的分庫分表。

分庫與分錶帶來的分佈式困境與應對之策       

數據遷移與擴容,表關聯,分頁和排序,分佈式事務,分佈式全局唯一ID等問題。

9.說說 SQL 優化之道

對查詢進行優化,要儘量避免全表掃描,首先應考慮在where order by 涉及的列上建立索引。exists代替 in ,具體的字段列表代替*,避免使用遊標,因爲遊標的效率較差,儘量避免大事務操作,提高系統併發能力,Update語句,如果只更改12字段,不要Update全部字段。

10.數據庫常用的函數有哪些?

----統計函數----

AVG  --求平均值

COUNT  --統計數目

MAX  --求最大值

MIN  --求最小值

SUM  --求和

----日期函數----
DAY()  --函數返回date_expression 中的日期值
MONTH()  --函數返回date_expression 中的月份值
YEAR()  --函數返回date_expression 中的年份值
DATENAME(<datepart> , <date>) --函數以字符串的形式返回日期的指定部分
DATEPART(<datepart> , <date>) --函數以整數值的形式返回日期的指定部分

----字符串函數----
ASCII()     --函數返回字符表達式最左端字符的ASCII 碼值
CHAR()  --函數用於將ASCII 碼轉換爲字符
  --如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數會返回一個NULL 值
LOWER()  --函數把字符串全部轉換爲小寫
UPPER()  --函數把字符串全部轉換爲大寫
STR()  --函數把數值型數據轉換爲字符型數據
LTRIM()  --函數把字符串頭部的空格去掉
RTRIM()  --函數把字符串尾部的空格去掉

sql命令大全

1、創建數據庫 create database database-name

2、刪除數據庫 drop database dbname

3、備份sql server

--- 創建備份數據的 device

use master

exec sp_addumpdevice 'disk', 'testBack','c:\mssql7backup\MyNwind_1.dat'

--- 開始備份

BACKUP database pubs TO testBack

4、創建新表create table tabname(col1 type1 [not null][primary key],col2 type2 [not null],..)

根據已有的表創建新表:

Acreate table tab_new like tab_old (使用舊錶創建新表)

Bcreate table tab_new as select col1,col2 fromtab_old definition only

5、刪除新表 drop table tabname

6、增加一個列alter table tabname add column colType

注:列增加後將不能刪除,唯一能改變的是增加varchar類型的長度。

7、添加(刪除)主鍵: alter table tabname add (drop) primarykey(col)

8、創建索引:create [unique] index idxname on tablename(col.)

   刪除索引:dropindex idxname

   注:索引是不可更改的,想更改必須刪除重新建。

9、創建(刪除)視圖:create(drop)  view viewname as select statement

10、說明:幾個簡單的基本的sql語句

選擇:select * from table1where 範圍

插入:insert intotable1(field1,field2) values(value1,value2)

刪除:delete from table1where 範圍

更新:update table1 setfield1=value1 where 範圍

查找:select * from table1where field1 like %value1%

排序:select * from table1order by field1,field2 [desc]

總數:select count astotalcount from table1

求和:select sum(field1) assumvalue from table1

平均:select avg(field1) asavgvalue from table1

最大:select max(field1) asmaxvalue from table1

最小:select min(field1) asminvalue from table1

行列轉化(max casewhen else))

       select Student as'姓名',

       max(case Subjectwhen '語文' then Score else 0 end) as '語文' ,

       max(case Subjectwhen '英語' then Score else 0 end ) as '英語'

       from Scores groupby Student

11、說明:幾個高級查詢運算詞

A UNION 運算符

UNION 運算符通過組合其他兩個結果表(例如 TABLE1 TABLE2)並消去表中任何重複行而派生出一個結果表。

ALL UNION 一起使用時(即UNION ALL),不消除重複行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2

B EXCEPT 運算符

EXCEPT運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重複行而派生出一個結果表。

ALL EXCEPT一起使用時 (EXCEPT ALL),不消除重複行。

C INTERSECT 運算符

INTERSECT運算符通過只包括 TABLE1 TABLE2 中都有的行並消除所有重複行而派生出一個結果表。

ALLINTERSECT 一起使用時 (INTERSECT ALL),不消除重複行。

注:使用運算詞的幾個查詢結果行必須是一致的。

12、說明:使用外連接

Aleft outer join

左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT JOIN bON a.a = b.c

Bright outer join:

右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。

Cfull/cross outer join

全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。

12、分組:Group by having:

   一張表,一旦分組完成後,查詢後只能得到組相關的信息。

    組相關的信息:(統計信息) count,sum,max,min,avg 分組的標準)

13、對數據庫進行操作:

   分離數據庫:sp_detach_db;附加數據庫:sp_attach_db 後接表明,附加需要完整的路徑名

14.如何修改數據庫的名稱:

sp_renamedb 'old_name', 'new_name'

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章