1. 程式人生 > >MYSQL常見面試題及基礎知識點

MYSQL常見面試題及基礎知識點

本人的所有部落格都會持續更新新增新的內容,喜歡的可以收藏一波,有什麼建議也可以在評論留言,感謝各位!

1.資料庫中事務的四大特性(ACID)

事務概念:

事務由單獨單元的一個或多個SQL語句組成,在這個單元中,每個SQL語句是相互依賴的。而整個單獨單元作為一個不可分割的整體,如果單元中某條SQL語句一旦執行失敗或產生錯誤,整個單元將會回滾。所有受到影響的資料將返回到事物開始以前的狀態;如果單元中的所有SQL語句均執行成功,則事物被順利執行。

⑴ 原子性(Atomicity)
  原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾。

⑵ 一致性(Consistency)
  一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。
  拿轉賬來說,假設使用者A和使用者B兩者的錢加起來一共是5000,那麼不管A和B之間如何轉賬,轉幾次賬,事務結束後兩個使用者的錢相加起來應該還得是5000,這就是事務的一致性。
⑶ 隔離性(Isolation)


  隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作所幹擾,多個併發事務之間要相互隔離。
  即要達到這麼一種效果:對於任意兩個併發的事務T1和T2,在事務T1看來,T2要麼在T1開始之前就已經結束,要麼在T1結束之後才開始,這樣每個事務都感覺不到有其他事務在併發地執行。
⑷ 永續性(Durability)
  永續性是指一個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

2、MySQL中myisam與innodb的區別,至少5點
(1)、問5點不同;

    1>.InnoDB支援事物,而MyISAM不支援事物
    2>.InnoDB支援行級鎖,而MyISAM支援表級鎖
    3>.InnoDB支援MVCC, 而MyISAM不支援
    4>.InnoDB支援外來鍵,而MyISAM不支援
    5>.InnoDB不支援全文索引,而MyISAM支援。

    InnoDB提供提交、回滾、崩潰恢復能力的事務安全(ASID)能力,實現併發控制。

    MyISAM提供較高的插入和查詢記錄的效率,主要用於插入和查詢。

    memory用於臨時存放資料,資料量不大並且不需要較高資料安全性。

    archive:如果只有插入和查詢可以用,支援高併發的插入操作,但本身不是事務安全。

(2)、2者select count(*)哪個更快,為什麼

   MyISAM更快,因為MyISAM內部維護了一個計數器,可以直接調取。

(3)mysql中四個儲存引擎:innodb、myisam、memory、archive

3.innodb的事務與日誌的實現方式

錯誤日誌:記錄出錯資訊,也記錄一些警告資訊或者正確的資訊。
查詢日誌:記錄所有對資料庫請求的資訊,不論這些請求是否得到了正確的執行。
慢查詢日誌:設定一個閾值,將執行時間超過該值的所有SQL語句都記錄到慢查詢的日誌檔案中。
二進位制日誌:記錄對資料庫執行更改的所有操作。

實現方式:事務日誌是通過redo和innodb的儲存引擎日誌緩衝(Innodb log buffer)來實現的。

4.MYSQL的三級模式

(1)模式(邏輯模式):是資料庫中全體資料的邏輯結構和特徵的描述,是所有使用者的公共資料檢視。

(2)外模式(使用者模式):是資料庫使用者的資料檢視,是區域性資料的邏輯結構和特徵的描述。

(3)內模式(儲存模式):一個數據庫只有一個內模式,是資料物理結構和儲存方式的描述,是資料在資料庫內部的表示方式。

5.表操作命令:create、alter、drop。    資料操作指令:select、insert、delete、update

select 表名 from ... where ...

insert into table values()

update 表名 set ...

delete from 表名 where ...

6.外連線分為內連線、左連線、右連線

內連線是根據某個條件連線兩個表共有的資料;

左連線是根據某個條件以及左邊的表連線資料,右邊的表沒資料的話則填null;

右連線是根據某個條件以及右邊的表連線資料,左邊的表沒資料的話則填null;

7.mysql中檢視和表的區別以及聯絡是什麼?

區別:

(1)檢視是已經編譯好的SQL語句,是基於SQL語句的結果集的視覺化的表,而表不是。

(2)檢視沒有實際的物理記錄,而表有。

(3)檢視是視窗,表是內容。

(4)檢視是邏輯概念的存在,不佔用物理空間;而表佔用物理空間。

(5)表可以及時對它進行修改;而檢視只能用建立語句來修改。

(6)檢視是檢視資料表的一種方法,可以查詢資料表中某些欄位構成的資料,只是一些SQL語句的集合。

(7)從安全來說,檢視可以防止使用者直接接觸表,因而使用者不知道表結構。

(8)表屬於全域性模式中的表,是實表;檢視屬於區域性模式的表,是虛表。

(9)檢視的建立和刪除隻影響檢視本身,不影響對應的表。

聯絡:

      檢視是在表之上建立的虛表,它的結構(所定義的列)和內容(所有記錄)都來自表,檢視依據表存在而存在。一個檢視可以對應多個表。檢視是表的抽象和在邏輯意義上建立的新關係。

      刪除檢視中的資料,資料庫中表的資料會一起被刪除。

8.安全性操作

授權:grant 許可權(列) on 表名 to 使用者

所有許可權:all priviliges

收回許可權:revoke 許可權(列) on 表名 from 使用者

9.完整性約束

主鍵約束:primary key

外來鍵約束:foreign key

唯一約束:unique

檢查約束:check

非空約束:not null

10.儲存過程(procedure)和函式(function)區別

      本質上它們都是儲存程式。函式只能通過return語句返回單個值或表物件;而儲存過程不允許執行return語句,但是可以通過output引數返回多個值。函式限制比較多,不能用臨時變數,只能用表變數,還有一些函式都不可用等等;而儲存過程的限制相對就比較少。函式可以嵌入在SQL語句中使用,可以在select語句中作為查詢語句的一個部分呼叫;而儲存過程一般是作為一個獨立的部分來執行。

11.觸發器和約束的區別

      觸發器是由伺服器自動啟用的,類似於約束,但是比約束更加靈活,可以實施比約束更加複雜的檢查和操作,具有更強大的資料控制能力。

12.事務隔離級別

(1)Read uncommitted 未提交讀(RU)

        最弱的隔離級別,事務中的修改即使沒有提交,對其他事務也都是可見的。(即髒讀

(2)Read committed 提交讀  不可重複讀(RC)

        大多數資料庫系統的預設隔離級別。

        解決了髒讀的問題,一個事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的。

        一個事務兩次執行同樣的查詢,可能會得到不一樣的結果。

(3)Repeatable read 可重複讀(RR)

        mysql預設隔離級別。

        解決了髒讀的問題。該級別保證了在同一個事務中多次讀取同樣記錄的結果是一致的。

       該級無法解決幻讀的問題,幻讀是當某個事務在讀取某個範圍內的記錄時,另一個事務又在該範圍內插入了新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻讀。

         innodb和xtradb儲存引擎通過多版本併發控制(MVCC,Multiversion Concurrency Control)解決了幻讀的問題。

(4)Serializable 可序列化

        該級是最高的級別,通過強制事務序列執行,避免了幻讀的問題,該級會在讀取的每一行資料上都加鎖,所以可能導致大量的超時和鎖爭用的問題,


13.索引

MYSQL中索引檔案以B樹結構儲存,索引可分為單列索引和多列索引。

對於多列索引中,一個SQL語句是否用到了索引取決於其資料是否符合最左字首原則。

MySQL只有對以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE。可以在LIKE操作中使用索引的情形是指另一個運算元不是以萬用字元(%或者_)開頭的情形。例如,“SELECT id FROM people WHERE firstname LIKE ‘Li%’;”這個查詢將使用索引,但“SELECT id FROM people WHERE firstname LIKE ‘%ike’;”這個查詢不會使用索引。

14.關係資料庫的特點(記住6個點即可)

1)資料集中控制。在檔案管理方法中,檔案是分散的,每個使用者或每種處理都有各自的檔案,這些檔案之間一般是沒有聯絡的,因此,不能按照統一的方法來控制、維護和管理。而資料庫則很好地克服了這一缺點,可以集中控制、維護和管理有關資料。
2)資料獨立性高。資料庫中的資料獨立於應用程式,包括資料的物理獨立性和邏輯獨立性,給資料庫的使用、調整、優化和進一步擴充提供了方便,提高了資料庫應用系統的穩定性。
3)資料共享性好。資料庫中的資料可以供多個使用者使用,每個使用者只與庫中的一部分資料發生聯絡;使用者資料可以重疊,使用者可以同時存取資料而互不影響,大大提高了資料庫的使用效率。
4)資料冗餘度小。資料庫中的資料不是面向應用,而是面向系統。資料統一定義、組織和儲存,集中管理,避免了不必要的資料冗餘,也提高了資料的一致性。
5)資料結構化,整個資料庫按一定的結構形式構成,資料在記錄內部和記錄型別之間相互關聯,使用者可通過不同的路徑存取資料。
6)統一的資料保護功能,在多使用者共享資料資源的情況下,對使用者使用資料有嚴格的檢查,對資料庫規定密碼或存取許可權,拒絕非法使用者進入資料庫,以確保資料的安全性、一致性和併發控制。

15.join和union的區別

詳細請看 http://blog.csdn.net/ljxfblog/article/details/52066006