国产欧美国产精品第二区-国产欧美日韩亚洲一区-国产中文字幕一区在线-欧美一级在线免费播放

登錄
免費(fèi)注冊(cè)
400-6565-277
首頁圖

新聞動(dòng)態(tài)

news information

MySQL奪命10問,你能堅(jiān)持到第幾問?

2022-07-22作者:捷碼瀏覽:

MySQL在面試中經(jīng)常被問到,本文總結(jié)了面試中的經(jīng)典問題。

1.數(shù)據(jù)庫三大范式是什么?

第一范式:每個(gè)列都不可以再拆分。

第二范式:在第一范式的基礎(chǔ)上,非主鍵列完全依賴于主鍵,而不能是依賴于主鍵的一部分。

第三范式:在第二范式的基礎(chǔ)上,非主鍵列只依賴于主鍵,不依賴于其他非主鍵。

在設(shè)計(jì)數(shù)據(jù)庫結(jié)構(gòu)的時(shí)候,要盡量遵守三范式,如果不遵守,必須有足夠的理由。

比如性能。事實(shí)上我們經(jīng)常會(huì)為了性能而妥協(xié)數(shù)據(jù)庫的設(shè)計(jì)。

2.mysql有關(guān)權(quán)限的表都有哪幾個(gè)?

MySQL服務(wù)器通過權(quán)限表來控制用戶對(duì)數(shù)據(jù)庫的訪問,權(quán)限表存放在mysql數(shù)據(jù)庫里,由mysql_install_db腳本初始化。

這些權(quán)限表分別user,db,table_privcolumns_privhost。

user權(quán)限表:記錄允許連接到服務(wù)器的用戶帳號(hào)信息,里面的權(quán)限是全局級(jí)的。

db權(quán)限表:記錄各個(gè)帳號(hào)在各個(gè)數(shù)據(jù)庫上的操作權(quán)限。

table_priv權(quán)限表:記錄數(shù)據(jù)表級(jí)的操作權(quán)限。

columns_priv權(quán)限表:記錄數(shù)據(jù)列級(jí)的操作權(quán)限。

host權(quán)限表:配合db權(quán)限表對(duì)給定主機(jī)上數(shù)據(jù)庫級(jí)操作權(quán)限作更細(xì)致的控制。這個(gè)權(quán)限表不受GRANTREVOKE語句的影響。

3.SQL語句主要分為哪幾類?

·數(shù)據(jù)定義語言DDLData Ddefinition LanguageCREATE,DROPALTER

主要為以上操作,即對(duì)邏輯結(jié)構(gòu)等有操作的,其中包括表結(jié)構(gòu),視圖和索引。

·數(shù)據(jù)查詢語言DQLData Query LanguageSELECT

這個(gè)較為好理解,即查詢操作,以select關(guān)鍵字。

各種簡(jiǎn)單查詢,連接查詢等都屬于DQL。

·數(shù)據(jù)操縱語言DMLData Manipulation LanguageINSERTUPDATE,DELETE

主要為以上操作即對(duì)數(shù)據(jù)進(jìn)行操作的,對(duì)應(yīng)上面所說的查詢操作DQLDML共同構(gòu)建了多數(shù)初級(jí)程序員常用的增刪改查操作。查詢是較為特殊的一種,被劃分到DQL中。

·數(shù)據(jù)控制功能DCLData Control LanguageGRANT,REVOKECOMMIT,ROLLBACK

主要為以上操作即對(duì)數(shù)據(jù)庫安全性完整性等有操作的,可以簡(jiǎn)單的理解為權(quán)限控制等。

4.什么是死鎖?怎么解決?

死鎖是指兩個(gè)或多個(gè)事務(wù)在同一資源上相互占用,并請(qǐng)求鎖定對(duì)方的資源,從而導(dǎo)致惡性循環(huán)的現(xiàn)象。

常見的解決死鎖的方法

如果不同程序會(huì)并發(fā)存取多個(gè)表,盡量約定以相同的順序訪問表,可以大大降低死鎖機(jī)會(huì)

在同一個(gè)事務(wù)中,盡可能做到一次鎖定所需要的所有資源,減少死鎖產(chǎn)生概率;

對(duì)于非常容易產(chǎn)生死鎖的業(yè)務(wù)部分,可以嘗試使用升級(jí)鎖定顆粒度,通過表級(jí)鎖定來減少死鎖產(chǎn)生的概率;

如果業(yè)務(wù)處理不好可以用分布式事務(wù)鎖或者使用樂觀鎖。

5.什么是臟讀?幻讀?不可重復(fù)讀?

臟讀(Drity Read):某個(gè)事務(wù)已更新一份數(shù)據(jù),另一個(gè)事務(wù)在此時(shí)讀取了同一份數(shù)據(jù),由于某些原因,前一個(gè)RollBack了操作,則后一個(gè)事務(wù)所讀取的數(shù)據(jù)就會(huì)是不正確的。

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

幻讀(Phantom Read)在一個(gè)事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致,例如有一個(gè)事務(wù)查詢了幾列(Row)數(shù)據(jù),而另一個(gè)事務(wù)卻在此時(shí)插入了新的幾列數(shù)據(jù),先前的事務(wù)在接下來的查詢中,就會(huì)發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的。

6.SQL的生命周期?

應(yīng)用服務(wù)器與數(shù)據(jù)庫服務(wù)器建立一個(gè)連接

數(shù)據(jù)庫進(jìn)程拿到請(qǐng)求sql

解析并生成執(zhí)行計(jì)劃,執(zhí)行

讀取數(shù)據(jù)到內(nèi)存并進(jìn)行邏輯處理

通過步驟一的連接,發(fā)送結(jié)果到客戶端

關(guān)掉連接,釋放資源

7.MySQL數(shù)據(jù)庫cpu飆升到100%的話怎么處理?

當(dāng)cpu飆升到100%時(shí),先用操作系統(tǒng)命令top命令觀察是不是mysqld占用導(dǎo)致的。

如果不是,找出占用高的進(jìn)程,并進(jìn)行相關(guān)處理。

如果是mysqld造成的,show processlist,看看里面跑的session情況,是不是有消耗資源的sql在運(yùn)行。找出消耗高的sql,看看執(zhí)行計(jì)劃是否準(zhǔn)確,index是否缺失,或者實(shí)在是數(shù)據(jù)量太大造成。

一般來說,肯定要kill掉這些線程(同時(shí)觀察cpu使用率是否下降),等進(jìn)行相應(yīng)的調(diào)整(比如說加索引、改sql、改內(nèi)存參數(shù))之后,再重新跑這些SQL

也有可能是每個(gè)sql消耗資源并不多,但是突然之間,有大量的session連進(jìn)來導(dǎo)致cpu飆升,這種情況就需要跟應(yīng)用一起來分析為何連接數(shù)會(huì)激增,再做出相應(yīng)的調(diào)整,比如說限制連接數(shù)等。

8.MySQL主從復(fù)制解決了哪些問題?

主從復(fù)制的作用是:

主數(shù)據(jù)庫出現(xiàn)問題,可以切換到從數(shù)據(jù)庫。可以進(jìn)行數(shù)據(jù)庫層面的讀寫分離。可以在從數(shù)據(jù)庫上進(jìn)行日常備份。

數(shù)據(jù)分布:隨意開始或停止復(fù)制,并在不同地理位置分布數(shù)據(jù)備份

負(fù)載均衡:降低單個(gè)服務(wù)器的壓力

高可用和故障切換:幫助應(yīng)用程序避免單點(diǎn)失敗

升級(jí)測(cè)試:可以用更高版本的MySQL作為從庫

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

常用備份工具mysql復(fù)制

邏輯備份(mysqldumpmydumper)

物理備份(copy,xtrabackup)

備份工具差異對(duì)比:

·mysql復(fù)制相對(duì)于其他的備份來說,得到的備份數(shù)據(jù)比較實(shí)時(shí)。

·邏輯備份:分表比較容易。mysqldump備份數(shù)據(jù)時(shí)是將所有sql語句整合在同一個(gè)文件中;mydumper備份數(shù)據(jù)時(shí)是將SQL語句按照表拆分成單個(gè)的sql文件, 每個(gè)sql文件對(duì)應(yīng)一個(gè)完整的表。

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

copy:直接拷貝文件到數(shù)據(jù)目錄下,可能引起表損壞或者數(shù)據(jù)不一致。

xtrabackup對(duì)于innodb表是不需要鎖表的,對(duì)于myisam表仍然需要鎖表。

10.MySQL備份計(jì)劃如何制定?

視庫的大小來定一般來說100G內(nèi)的庫,可以考慮使用mysqldump來做,因?yàn)?/span>mysqldump更加輕巧靈活,備份時(shí)間選在業(yè)務(wù)低峰期,可以每天進(jìn)行都進(jìn)行全量備份(mysqldump備份出來的文件比較小,壓縮之后更小)

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

一般是選擇一周一個(gè)全備,其余每天進(jìn)行增量備份,備份時(shí)間為業(yè)務(wù)低峰期。


“捷碼”低代碼平臺(tái)是杭州遠(yuǎn)眺科技有限公司自主研發(fā)的一款全技術(shù)鏈賦能的通用型低代碼開發(fā)平臺(tái),具有強(qiáng)大的數(shù)據(jù)開發(fā)能力,可直接連接MySQLPostgre SQL、ORACLESQL Server等主流數(shù)據(jù)庫。對(duì)是國(guó)產(chǎn)數(shù)據(jù)庫,也可以通過數(shù)據(jù)交換的增值模塊,交換成MySQL進(jìn)行連接,助力開發(fā)團(tuán)隊(duì)快速、低成本地構(gòu)建數(shù)字化軟件應(yīng)用。

掃碼添加捷碼微信入群~已有5000+智慧城市/AloT/IT行業(yè)精英入群交流,入群即得《Java核心技術(shù)電子書》

文章掛尾.png



%用戶還看了以下內(nèi)容

程序員會(huì)被 AI 取代嗎?捷碼智助力效率翻倍! 閱讀745次

低代碼開發(fā)平臺(tái)能否取代傳統(tǒng)開發(fā)??jī)?yōu)缺點(diǎn)詳解助你做決策! 閱讀964次

大屏低代碼開發(fā)平臺(tái)排名?2024年最佳平臺(tái)推薦與分析! 閱讀1136次

免費(fèi)的低代碼開發(fā)平臺(tái)大盤點(diǎn):協(xié)同管理、智慧城市、BPM流程一網(wǎng)打盡! 閱讀840次

快速試用捷碼

x