MySQL在面試中經(jīng)常被問到,本文總結(jié)了面試中的經(jīng)典問題。
1.數(shù)據(jù)庫三大范式是什么?
第一范式:每個列都不可以再拆分。
第二范式:在第一范式的基礎上,非主鍵列完全依賴于主鍵,而不能是依賴于主鍵的一部分。
第三范式:在第二范式的基礎上,非主鍵列只依賴于主鍵,不依賴于其他非主鍵。
在設計數(shù)據(jù)庫結(jié)構的時候,要盡量遵守三范式,如果不遵守,必須有足夠的理由。
比如性能。事實上我們經(jīng)常會為了性能而妥協(xié)數(shù)據(jù)庫的設計。
2.mysql有關權限的表都有哪幾個?
MySQL服務器通過權限表來控制用戶對數(shù)據(jù)庫的訪問,權限表存放在mysql數(shù)據(jù)庫里,由mysql_install_db腳本初始化。
這些權限表分別是user,db,table_priv,columns_priv和host。
user權限表:記錄允許連接到服務器的用戶帳號信息,里面的權限是全局級的。
db權限表:記錄各個帳號在各個數(shù)據(jù)庫上的操作權限。
table_priv權限表:記錄數(shù)據(jù)表級的操作權限。
columns_priv權限表:記錄數(shù)據(jù)列級的操作權限。
host權限表:配合db權限表對給定主機上的數(shù)據(jù)庫級操作權限作更細致的控制。這個權限表不受GRANT和REVOKE語句的影響。
3.SQL語句主要分為哪幾類?
·數(shù)據(jù)定義語言DDL(Data Ddefinition Language)CREATE,DROP,ALTER
主要為以上操作,即對邏輯結(jié)構等有操作的,其中包括表結(jié)構,視圖和索引。
·數(shù)據(jù)查詢語言DQL(Data Query Language)SELECT
這個較為好理解,即查詢操作,以select關鍵字。
各種簡單查詢,連接查詢等都屬于DQL。
·數(shù)據(jù)操縱語言DML(Data Manipulation Language)INSERT,UPDATE,DELETE
主要為以上操作,即對數(shù)據(jù)進行操作的,對應上面所說的查詢操作DQL與DML共同構建了多數(shù)初級程序員常用的增刪改查操作。查詢是較為特殊的一種,被劃分到DQL中。
·數(shù)據(jù)控制功能DCL(Data Control Language)GRANT,REVOKE,COMMIT,ROLLBACK
主要為以上操作,即對數(shù)據(jù)庫安全性完整性等有操作的,可以簡單的理解為權限控制等。
4.什么是死鎖?怎么解決?
死鎖是指兩個或多個事務在同一資源上相互占用,并請求鎖定對方的資源,從而導致惡性循環(huán)的現(xiàn)象。
常見的解決死鎖的方法:
如果不同程序會并發(fā)存取多個表,盡量約定以相同的順序訪問表,可以大大降低死鎖機會;
在同一個事務中,盡可能做到一次鎖定所需要的所有資源,減少死鎖產(chǎn)生概率;
對于非常容易產(chǎn)生死鎖的業(yè)務部分,可以嘗試使用升級鎖定顆粒度,通過表級鎖定來減少死鎖產(chǎn)生的概率;
如果業(yè)務處理不好可以用分布式事務鎖或者使用樂觀鎖。
5.什么是臟讀?幻讀?不可重復讀?
臟讀(Drity Read):某個事務已更新一份數(shù)據(jù),另一個事務在此時讀取了同一份數(shù)據(jù),由于某些原因,前一個RollBack了操作,則后一個事務所讀取的數(shù)據(jù)就會是不正確的。
不可重復讀(Non-repeatable read):在一個事務的兩次查詢之中數(shù)據(jù)不一致,這可能是兩次查詢過程中間插入了一個事務更新了原有的數(shù)據(jù)。
幻讀(Phantom Read):在一個事務的兩次查詢中,數(shù)據(jù)筆數(shù)不一致,例如有一個事務查詢了幾列(Row)數(shù)據(jù),而另一個事務卻在此時插入了新的幾列數(shù)據(jù),先前的事務在接下來的查詢中,就會發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的。
6.SQL的生命周期?
①應用服務器與數(shù)據(jù)庫服務器建立一個連接
②數(shù)據(jù)庫進程拿到請求sql
③解析并生成執(zhí)行計劃,執(zhí)行
④讀取數(shù)據(jù)到內(nèi)存并進行邏輯處理
⑤通過步驟一的連接,發(fā)送結(jié)果到客戶端
⑥關掉連接,釋放資源
7.MySQL數(shù)據(jù)庫cpu飆升到100%的話怎么處理?
當cpu飆升到100%時,先用操作系統(tǒng)命令top命令觀察是不是mysqld占用導致的。
如果不是,找出占用高的進程,并進行相關處理。
如果是mysqld造成的,show processlist,看看里面跑的session情況,是不是有消耗資源的sql在運行。找出消耗高的sql,看看執(zhí)行計劃是否準確,index是否缺失,或者實在是數(shù)據(jù)量太大造成。
一般來說,肯定要kill掉這些線程(同時觀察cpu使用率是否下降),等進行相應的調(diào)整(比如說加索引、改sql、改內(nèi)存參數(shù))之后,再重新跑這些SQL。
也有可能是每個sql消耗資源并不多,但是突然之間,有大量的session連進來導致cpu飆升,這種情況就需要跟應用一起來分析為何連接數(shù)會激增,再做出相應的調(diào)整,比如說限制連接數(shù)等。
8.MySQL主從復制解決了哪些問題?
主從復制的作用是:
主數(shù)據(jù)庫出現(xiàn)問題,可以切換到從數(shù)據(jù)庫??梢赃M行數(shù)據(jù)庫層面的讀寫分離??梢栽趶臄?shù)據(jù)庫上進行日常備份。
數(shù)據(jù)分布:隨意開始或停止復制,并在不同地理位置分布數(shù)據(jù)備份
負載均衡:降低單個服務器的壓力
高可用和故障切換:幫助應用程序避免單點失敗
升級測試:可以用更高版本的MySQL作為從庫
9.MySQL常用的備份工具有哪些?
常用備份工具mysql復制:
邏輯備份(mysqldump,mydumper)
物理備份(copy,xtrabackup)
備份工具差異對比:
·mysql復制相對于其他的備份來說,得到的備份數(shù)據(jù)比較實時。
·邏輯備份:分表比較容易。mysqldump備份數(shù)據(jù)時是將所有sql語句整合在同一個文件中;mydumper備份數(shù)據(jù)時是將SQL語句按照表拆分成單個的sql文件, 每個sql文件對應一個完整的表。
·物理備份:拷貝即可用,速度快。
copy:直接拷貝文件到數(shù)據(jù)目錄下,可能引起表損壞或者數(shù)據(jù)不一致。
xtrabackup對于innodb表是不需要鎖表的,對于myisam表仍然需要鎖表。
10.MySQL備份計劃如何制定?
視庫的大小來定。一般來說100G內(nèi)的庫,可以考慮使用mysqldump來做,因為mysqldump更加輕巧靈活,備份時間選在業(yè)務低峰期,可以每天進行都進行全量備份(mysqldump備份出來的文件比較小,壓縮之后更小)。
100G以上的庫,可以考慮用xtranbackup來做,備份速度明顯要比mysqldump要快。
一般是選擇一周一個全備,其余每天進行增量備份,備份時間為業(yè)務低峰期。
“捷碼”低代碼平臺是杭州遠眺科技有限公司自主研發(fā)的一款全技術鏈賦能的通用型低代碼開發(fā)平臺,具有強大的數(shù)據(jù)開發(fā)能力,可直接連接MySQL、Postgre SQL、ORACLE、SQL Server等主流數(shù)據(jù)庫。對是國產(chǎn)數(shù)據(jù)庫,也可以通過數(shù)據(jù)交換的增值模塊,交換成MySQL進行連接,助力開發(fā)團隊快速、低成本地構建數(shù)字化軟件應用。
掃碼添加捷碼微信入群~已有5000+智慧城市/AloT/IT行業(yè)精英入群交流,入群即得《Java核心技術電子書》
當“智慧水利”遇到“低代碼”,揭開數(shù)字水庫可視化監(jiān)管平臺快速打造的秘密! 閱讀670次
低代碼應用案例解析, 高效打造智慧工廠、智慧農(nóng)業(yè)應用! 閱讀865次
低代碼開發(fā):釋放你的創(chuàng)意,輕松打造數(shù)字孿生應用! 閱讀563次
低代碼開發(fā)流程解析:加速應用開發(fā)的秘籍 閱讀601次
點擊“立即申請”即可成為捷碼客戶,將享受捷碼終身技術咨詢服務,和遠程技術支持服務。