1. 請簡述常用的索引有哪些種類,以及在mysql數據庫中索引的工作機制是什麼?
(1)索引的常見種類:
1)普通索引
即針對數據庫表創建索引
2)唯一索引
與普通索引類似,不同的就是:MySQL數據庫索引列的值必須唯一,但允許有空值
3)主鍵索引
它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引
4)組合索引
為了進一步榨取MySQL的效率,就要考慮建立組合索引。即將數據庫表中的多個字段聯合起來作為一個組合索引。
(2)索引的工作機制
1)索引的實現結構和作用簡介:
數據庫索引,是數據庫管理系統中一個排序的數據結構,以協助快速查詢、更新數據庫表中數據。索引的實現通常使用B樹及其變種B+樹。
2)索引的工作機制示意圖和機制簡介:
示意圖:
機制解釋:
上邊的示意圖展示了一種可能的索引方式。左邊是數據表,一共有兩列三行,最左邊的是數據記錄的物理地址(邏輯上相鄰的記錄在磁盤上也並不是一定物理相鄰的)。為了加快列2的數據的查找,可以維護一個右邊所示的二叉查找樹,每個節點分別包含索引鍵值和一個指向對應數據記錄物理地址的指針,這樣就可以運用二叉查找樹,更快的獲取到相應數據。
2. MySQL常見的兩種存儲引擎:MyISAM和InnoDB,兩者的核心區別?
1)InnoDB支持事物,而MyISAM不支持事物
2)InnoDB支持行級鎖,而MyISAM支持表級鎖
3)InnoDB支持MVCC, 而MyISAM不支持
4)InnoDB支持外鍵,而MyISAM不支持
5)InnoDB不支持全文索引,而MyISAM支持。
3. 觸發器的概念、存儲過程的概念?以及兩者的區別?
(1) 觸發器的概念
它是數據庫提供給程序員和數據分析員來保證數據完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程序調用,也不是手工啟動,而是由事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。
(2)存儲過程的概念
它是在大型數據庫系統中,一組為了完成特定功能的SQL 語句集。存儲過程在數據庫中,經過第一次編譯後再次調用不需要再次編譯,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。
(3)兩者的區別
1)觸發器不能用EXECUTE語句調用,而是在用戶執行Transact-SQL語句時自動觸發(激活)執行
2)觸發器不同於存儲過程,觸發器主要是通過事件執行觸發而被執行的,而存儲過程可以通過存儲過程名稱名字而直接調用
4. Mysql的存儲引擎InnoDB的行鎖實現的類型以及實現的原理
(1)實現的類型:
InnoDB實現了以先兩種類型的行鎖:
共享鎖(S):允許一個事務去讀一行,阻止其他事務獲取相同數據集的排他鎖。
排他鎖(X):允許獲得排他鎖的事務更新數據,阻止其他事務取得相同數據集的共享讀鎖和排他寫鎖。
(2)實現的原理:
InnoDB行鎖是通過給索引上的索引項加鎖來實現的,InnoDB這種行鎖實現特點意味著:只有通過索引條件檢索數據,innoDB才使用行級鎖,否則InnoDB將使用表鎖。
MySQL中InnoDB引擎的行鎖是通過加在什麼上完成(或稱實現)的?為什麼是這樣子的?
舉例如下:
select * from person where id = 6 for update;
for update 可以根據條件來完成行鎖鎖定,並且 id 是有索引鍵的列,
如果 id 不是索引鍵那麼InnoDB將完成表鎖。
5. 請詳細解釋如下概念:主鍵 超鍵 候選鍵 外鍵
(1)主 鍵:
數據庫表中的唯一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能為空值(Null)。
(2)超 鍵:
在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。
(3)候選鍵:
是最小超鍵,即不含有多餘屬性的超鍵稱為候選鍵
(4)外 鍵:
如果關係模式R1中的某屬性集不是R1的主鍵,而是另一個關係R2的主鍵則該屬性集是關係模式R1的外鍵。
6. Mysql的查詢緩存的使用和原理?
(1)mysql中查看當前緩存相關參數的語句:
SHOW VARIABLES LIKE '%query_cache%';
查詢結果如下:
(2)參數解釋和使用:
1)query_cache_type
查詢緩存類型,有0、1、2三個取值。0則不使用查詢緩存。1表示始終使用查詢緩存。2表示按需使用查詢緩存。
2)query_cache_type
查詢緩存類型,有0、1、2三個取值。0則不使用查詢緩存。1表示始終使用查詢緩存。2表示按需使用查詢緩存。
設置query_cache_size的值:
SET GLOBAL query_cache_size = 1536815;
(3)查詢緩存的使用原理:
查詢緩存可以看做是SQL文本和查詢結果的映射。如果第二次查詢的SQL和第一次查詢的SQL完全相同且開啟了查詢緩存,那麼第二次查詢就直接從查詢緩存中取結果
除了以上筆試題和答案外,大家也可以關注這個頭條號"互利網IT技術",獲取如下筆試題:
精選11道Java技術面試題並有答案(包含部分阿里和華為的面試題)
京東和騰訊精選12道Java筆試題並有答案
精選12道Javaweb技術面試題並有答案解析(包括部分蘑菇街的)
小米和京東的4道關於Dubbo、Zookeeper等的面試題,並有答案分享
精選20道Java多線程面試題並有答案!
Mybatis面試題,這8道精選題目必看,有答案解析!