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