高級測試面試題(mysql篇)


現如今,面試高級測試、性能測試等崗位,面試官都喜歡問一些底層原理的問題,感覺和開發的面試越來越靠近了。

比如mysql,可能會問如下問題:

InnoDB行鎖實現方式?
innodb如何解決幻讀?
什么是回表?
B-樹的不足?
B+樹如何解決了B-樹的不足?
哪些情況,創建了索引也用不上?
什么是聚集索引、索引覆蓋、索引下推?
輔助索引的葉子節點為什么不存儲數據的指針地址?
InnoDB、MyISAM的優缺點?
事務的隔離級別有哪些?分別解決什么問題?
MVCC的原理?
主從復制原理?

 

雖然實際工作不一定能用上,但這樣確實可以看出面試者對知識的掌握程度和研究深度;本文主要演示一下之前一位微友遇到的面試題(上面第一個問題);從mysql-5.5.5開始,InnoDB就作為默認的存儲引擎了,其相關的特性,可以參考官網:https://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html 

創建表

CREATE TABLE `employeeInfo` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `employeeId` varchar(10) DEFAULT NULL,
  `job` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_employeeId` (`employeeId`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

  

添加數據

插入數據

insert INTO employeeInfo(name,employeeId,job) VALUES('全棧測試筆記0001','qzcsbj0001','dev');
insert INTO employeeInfo(name,employeeId,job) VALUES('全棧測試筆記0002','qzcsbj0002','manager');

  

不使用索引

說明:    

update/insert/delete默認加上排它鎖,下面為了演示,手動在事務中加    

下面選中的語句即為當前執行的語句


session1對第一條數據加排它鎖,where后面字段是非索引字段

圖片

session2對第二條數據加排它鎖,阻塞

圖片

session2插入數據,阻塞

圖片

至此,說明session1鎖表了。

主鍵索引

session1對第一條數據加排它鎖,where后面字段是主鍵索引字段

圖片

session2對第一條數據加排它鎖,阻塞,因為是同一條數據

圖片

session2對第二條數據加排它鎖,成功

圖片

session2插入數據,成功

圖片

至此,說明session1是行鎖。

唯一索引

session1對第一條數據加排它鎖,where后面字段是唯一索引字段

圖片

session2對第一條數據加排它鎖,阻塞,因為是同一條數據

圖片

session2對第二條數據加排它鎖,成功

圖片

session2對第一條數據加排它鎖(where后面是主鍵索引字段),阻塞,因為是同一條數據

圖片

session2對第二條數據加排它鎖(where后面是主鍵索引字段),成功

圖片

session2插入數據,成功

圖片

至此,說明session1是行鎖。 

結論:InnoDB的行鎖是通過索引實現的,如果session1不通過索引訪問數據,就會鎖表;另外,不同記錄的索引鍵最好不要一樣,否則會沖突導致鎖等待。

 

 

bak:https://www.cnblogs.com/uncleyong/p/13782477.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM