當前位置: 妍妍網 > 碼農

MySQL奪命15問,你能堅持到第幾問?

2024-05-27碼農

推薦關註

掃碼關註後端架構師」,選擇星標公眾號

重磅幹貨,第一時間送達!

責編:架構君 | 來源IT邦德

連結:jeames.blog.csdn.net/?type=blog

上一篇好文:

大家好,我是後端架構師。

前言

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. 事務的四大特性(ACID)介紹一下?

原子性:事務是最小的執行單位,不允許分割。

事務的原子性確保動作要麽全部完成,要麽完全不起作用;

一致性:執行事務前後,數據保持一致,多個事務對同一個數據讀取的結果是相同的;

隔離性:並行存取資料庫時,一個使用者的事務不被其他事務所幹擾,

各並行事務之間資料庫是獨立的;

永續性:一個事務被送出之後。它對資料庫中數據的改變是持久的, 即使資料庫發生故障也不應該對其有任何影響。

4. 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

主要為以上操作 即對資料庫安全性完整性等有操作的,可以簡單的理解為許可權控制等。

5. MySQL分庫分表的目的是?

分庫分表就是為了 解決由於數據量過大而導致資料庫效能降低的問題, 將原來獨立的資料庫拆分成若幹資料庫組成,將數據大表拆分成若幹數據表組成, 使得單一資料庫、單一數據表的數據量變小,從而達到提升資料庫效能的目的。

分庫分表常用的中介軟體如下:

6. 什麽是死結?怎麽解決?

死結是指兩個或多個事務在同一資源上相互占用,並請求釘選對方的資源,從而導致惡性迴圈的現象。

常見的解決死結的方法

  • 如果不同程式會並行存取多個表, 盡量約定以相同的順序存取表,可以大大降低死結機會。

  • 在同一個事務中,盡可能做到一次釘選所需要的所有資源,減少死結產生機率;

  • 對於非常容易產生死結的業務部份,可以嘗試使用升級釘選顆粒度,透過表級釘選來減少死結產生的機率;

  • 如果業務處理不好可以用分布式事務鎖或者使用樂觀鎖

    7. 什麽是臟讀?幻讀?不可重復讀?

    臟讀(Drity Read):某個事務已更新一份數據,另一個事務在此時讀取了同一份數據, 由於某些原因,前一個RollBack了操作,則後一個事務所讀取的數據就會是不正確的。

    不可重復讀(Non-repeatable read):在一個事務的兩次查詢之中數據不一致, 這可能是兩次查詢過程中間插入了一個事務更新的原有的數據。

    幻讀(Phantom Read):在一個事務的兩次查詢中數據筆數不一致, 例如有一個事務查詢了幾列(Row)數據, 而另一個事務卻在此時插入了新的幾列數據,先前的事務在接下來的查詢中, 就會發現有幾列數據是它先前所沒有的。

    8. 檢視有哪些特點?

    檢視的特點如下: 檢視的列可以來自不同的表,是表的抽象和在邏輯意義上建立的新關系。另外,搜尋公眾號Java就該這樣學後台回復「猴子」,獲取一份驚喜禮包。

    檢視是由基本表(實表)產生的表(虛表)。檢視的建立和刪除不影響基本表。

    對檢視內容的更新(添加,刪除和修改)直接影響基本表。

    當檢視來自多個基本表時,不允許添加和刪除數據。

    檢視的操作包括建立檢視,檢視檢視,刪除檢視和修改檢視。

    9. SQL的生命周期?

  • 套用伺服器與資料庫伺服器建立一個連線

  • 資料庫行程拿到請求sql

  • 解析並生成執行計劃,執行

  • 讀取數據到記憶體並進行邏輯處理

  • 透過步驟一的連線,發送結果到客戶端

  • 關掉連線,釋放資源

  • 10. 主鍵使用自增ID還是UUID?

    推薦使用自增ID,不要使用UUID。

    因為在InnoDB儲存引擎中,主鍵索引是作為聚簇索引存在的,也就是說, 主鍵索引的B+樹葉子節點上儲存了主鍵索引以及全部的數據(按照順序), 如果主鍵索引是自增ID,那麽只需要不斷向後排列即可,如果是UUID, 由於到來的ID與原來的大小不確定,會造成非常多的數據插入,數據移動,然後導致產生很多的記憶體碎片,進而造成插入效能的下降。

    總之,在數據量大一些的情況下,用自增主鍵效能會好一些。

    關於主鍵是聚簇索引,如果沒有主鍵,InnoDB會選擇一個唯一鍵來作為聚簇索引,如果沒有唯一鍵,會生成一個隱式的主鍵。

    11. MySQL資料庫cpu飆升到100%的話怎麽處理?

    當 cpu 飆升到 100%時,先用作業系統命令 top 命令觀察是不是 mysqld 占用導致的。

    如果不是,找出占用高的行程,並進行相關處理。

    如果是 mysqld 造成的, show processlist,看看裏面跑的 session 情況,是不是有消耗資源的 sql 在執行。找出消耗高的 sql,看看執行計劃是否準確,index 是否缺失,或者實在是數據量太大造成。

    一般來說,肯定要 kill 掉這些執行緒(同時觀察 cpu 使用率是否下降), 等進行相應的調整(比如說加索引、改 sql、改記憶體參數)之後,再重新跑這些 SQL。

    也有可能是每個 sql 消耗資源並不多,但是突然之間,有大量的 session 連進來導致 cpu 飆升, 這種情況就需要跟套用一起來分析為何連線數會激增, 再做出相應的調整,比如說限制連線數等。擴充套件:

    12. MySQL主從復制解決了哪些問題?

    主從復制的作用是:

    主資料庫出現問題,可以切換到從資料庫。可以進行資料庫層面的讀寫分離。可以在從資料庫上進行日常備份。

    數據分布:隨意開始或停止復制,並在不同地理位置分布數據備份

    負載均衡:降低單個伺服器的壓力

    高可用和故障切換:幫助應用程式避免單點失敗

    升級測試:可以用更高版本的MySQL作為從庫

    13. 什麽是MySQL的GTID?

    TID(Global Transaction ID,全域事務ID)是全域事務識別元, 是一個已送出事務的編號,並且是一個全域唯一的編號。

    GTID是從MySQL 5.6版本開始在主從復制方面推出的重量級特性。

    GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL例項的唯一標識。

    GTID代表了該例項上已經送出的事務數量,並且隨著事務送出單調遞增。

    GTID有如下幾點作用:

  • 根據GTID可以知道事務最初是在哪個例項上送出的。

  • GTID的存在方便了Replication的Failover。因為不用像傳統模式復制那樣去找master_log_file和master_log_pos。

  • 基於GTID搭建主從復制更加簡單, 確保每個事務只會被執行一次。

  • 14. MySQL常用的備份工具有哪些?

    常用備份工具mysql復制

    邏輯備份(mysqldump,mydumper)

    物理備份(copy,xtrabackup)

    備份工具差異對比:

  • mysql復制相對於其他的備份來說,得到的備份數據比較即時。

  • 邏輯備份:分表比較容易。mysqldump備份數據時是將所有sql語句整合在同一個檔中;mydumper備份數據時是將SQL語句按照表拆分成單個的sql檔, 每個sql檔對應一個完整的表。

  • 物理備份:拷貝即可用,速度快。

  • copy:直接拷貝檔到數據目錄下,可能引起表損壞或者數據不一致。

    xtrabackup對於innodb表是不需要鎖表的,對於myisam表仍然需要鎖表。

    15. MySQL備份計劃如何制定

    視庫的大小來定,一般來說 100G 內的庫,可以考慮使用 mysqldump 來做, 因為 mysqldump更加輕巧靈活,備份時間選在業務低峰期, 可以每天進行都進行全量備份(mysqldump 備份出來的檔比較小,壓縮之後更小)。

    100G 以上的庫,可以考慮用 xtranbackup 來做,備份速度明顯要比 mysqldump 要快。

    一般是選擇一周一個全備,其余每天進行增量備份,備份時間為業務低峰期。

    文章中出現的關於面試題的錯誤請在評論區指出,我再進行改正最佳化。如果文章對你有所幫助,請給團長一個免費的贊吧,感謝大家。

    歡迎有需要的同學試試,如果本文對您有幫助,也請幫忙點個 贊 + 在看 啦!❤️

    在 還有更多優質計畫系統學習資源,歡迎分享給其他同學吧!

    PS: 如果覺得我的分享不錯,歡迎大家隨手點贊、轉發、在看。

    最後給大家推薦一個ChatGPT 4.0國內網站,是我們團隊一直在使用的,我們對接是OpenAI官網的帳號,給大家打造了一個一模一樣ChatGPT,很多粉絲朋友現在也都透過我拿這種號,價格不貴,關鍵還有售後。

    一句話說明:用官方一半價格的錢,一句話說明:用跟官方 ChatGPT4.0 一模一樣功能,無需魔法,無視封號,不必擔心次數不夠。

    最大優勢:可實作會話隔離!突破限制:官方限制每個帳號三小時可使用40次4.0本網站可實作次數上限之後,手動切換下一個未使用的帳號【相當於一個4.0帳號,同享受一百個帳號輪換使用許可權】

    最後,再次推薦下我們的AI星

    為了跟上AI時代我幹了一件事兒,我建立了一個知識星球社群:ChartGPT與副業。想帶著大家一起探索ChatGPT和新的AI時代

    有很多小夥伴搞不定ChatGPT帳號,於是我們決定,凡是這四天之內加入ChatPGT的小夥伴,我們直接送一個正常可用的永久ChatGPT獨立帳戶。

    不光是增長速度最快,我們的星球品質也絕對經得起考驗,短短一個月時間,我們的課程團隊釋出了8個專欄、18個副業計畫:

    簡單說下這個星球能給大家提供什麽:


    1、不斷分享如何使用ChatGPT來完成各種任務,讓你更高效地使用ChatGPT,以及副業思考、變現思路、創業案例、落地案例分享。

    2、分享ChatGPT的使用方法、最新資訊、商業價值。

    3、探討未來關於ChatGPT的機遇,共同成長。

    4、幫助大家解決ChatGPT遇到的問題。

    5、提供一整年的售後服務,一起搞副業

    星球福利:

    1、加入星球4天後,就送ChatGPT獨立帳號。

    2、邀請你加入ChatGPT會員交流群。

    3、贈送一份完整的ChatGPT手冊和66個ChatGPT副業賺錢手冊。


    其它福利還在籌劃中... 不過,我給你大家保證,加入星球後,收獲的價值會遠遠大於今天加入的門票費用 !

    本星球第一期原價399,目前屬於試營運,早鳥價169,每超過50人漲價10元,星球馬上要來一波大的漲價,如果你還在猶豫,可能最後就要以更高價格加入了。。

    早就是優勢。建議大家盡早以便宜的價格加入!

    最後給讀者整理了一份BAT大廠面試真題,需要的可掃碼加微信備註:「 面試 」獲取。

    版權申明:內容來源網路,版權歸原創者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除並表示歉意。謝謝!

    END

    最近面試BAT,整理一份面試資料【Java面試BAT通關手冊】,覆蓋了Java核心技術、JVM、Java並行、SSM、微服務、資料庫、數據結構等等。在這裏,我為大家準備了一份2021年最新最全BAT等大廠Java面試經驗總結。

    別找了,想獲取史上最全的Java大廠面試題學習資料

    掃下方二維碼回復面試就好了

    歷史好文:

    掃碼關註後端架構師」,選擇星標公眾號

    重磅幹貨,第一時間送達!