1. 數(shù)據(jù)庫的三范式是什么?
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供合川網(wǎng)站建設(shè)、合川做網(wǎng)站、合川網(wǎng)站設(shè)計、合川網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、合川企業(yè)網(wǎng)站模板建站服務(wù),10年合川做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
第一范式:強調(diào)的是列的原子性,即數(shù)據(jù)庫表的每一列都是不可分割的原子數(shù)據(jù)項。
第二范式:要求實體的屬性完全依賴于主關(guān)鍵字。所謂完全依賴是指不能存在僅依賴主關(guān)鍵字一部分的屬性。
2. 一張自增表里面總共有 7 條數(shù)據(jù),刪除了最后 2 條數(shù)據(jù),重啟 MySQL 數(shù)據(jù)庫,又插入了一條數(shù)據(jù),此時 id 是幾?
表類型如果是 MyISAM ,那 id 就是 8。
InnoDB 表只會把自增主鍵的最大 id 記錄在內(nèi)存中,所以重啟之后會導(dǎo)致最大 id 丟失。
3. 如何獲取當(dāng)前數(shù)據(jù)庫版本?
使用 select version() 獲取當(dāng)前 MySQL 數(shù)據(jù)庫版本。
4. 說一下 ACID 是什么?
Atomicity(原子性):一個事務(wù)(transaction)中的所有操作,或者全部完成,或者全部不完成,不會結(jié)束在中間某個環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯誤,會被恢復(fù)(Rollback)到事務(wù)開始前的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過一樣。即,事務(wù)不可分割、不可約簡。
Consistency(一致性):在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)約束、觸發(fā)器、級聯(lián)回滾等。
Isolation(隔離性):數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時對其數(shù)據(jù)進行讀寫和修改的能力,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。
5. char 和 varchar 的區(qū)別是什么?
chat 優(yōu)點:效率高;缺點:占用空間;適用場景:存儲密碼的 md5 值,固定長度的,使用 char 非常合適。
所以,從空間上考慮 varcahr 比較合適;從效率上考慮 char 比較合適,二者使用需要權(quán)衡。
6. float 和 double 的區(qū)別是什么?
float 最多可以存儲 8 位的十進制數(shù),并在內(nèi)存中占 4 字節(jié)。
7. MySQL 的內(nèi)連接、左連接、右連接有什么區(qū)別?
內(nèi)連接關(guān)鍵字:inner join;左連接:left join;右連接:right join。
內(nèi)連接是把匹配的關(guān)聯(lián)數(shù)據(jù)顯示出來;左連接是左邊的表全部顯示出來,右邊的表顯示出符合條件的數(shù)據(jù);右連接正好相反。
8. MySQL 索引是怎么實現(xiàn)的?
索引是滿足某種特定查找算法的數(shù)據(jù)結(jié)構(gòu),而這些數(shù)據(jù)結(jié)構(gòu)會以某種方式指向數(shù)據(jù),從而實現(xiàn)高效查找數(shù)據(jù)。
具體來說 MySQL 中的索引,不同的數(shù)據(jù)引擎實現(xiàn)有所不同,但目前主流的數(shù)據(jù)庫引擎的索引都是 B+ 樹實現(xiàn)的,B+ 樹的搜索效率,可以到達(dá)二分法的性能,找到數(shù)據(jù)區(qū)域之后就找到了完整的數(shù)據(jù)結(jié)構(gòu)了,所有索引的性能也是更好的。
9. 怎么驗證 MySQL 的索引是否滿足需求?
使用 explain 查看 SQL 是如何執(zhí)行查詢語句的,從而分析你的索引是否滿足需求。
explain 語法:explain select * from table where type=1。
10. 說一下數(shù)據(jù)庫的事務(wù)隔離?
MySQL 的事務(wù)隔離是在 MySQL. ini 配置文件里添加的,在文件的最后添加:
transaction-isolation = REPEATABLE-READ
可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。
READ-UNCOMMITTED:未提交讀,最低隔離級別、事務(wù)未提交前,就可被其他事務(wù)讀?。〞霈F(xiàn)幻讀、臟讀、不可重復(fù)讀)。
READ-COMMITTED:提交讀,一個事務(wù)提交后才能被其他事務(wù)讀取到(會造成幻讀、不可重復(fù)讀)。
REPEATABLE-READ:可重復(fù)讀,默認(rèn)級別,保證多次讀取同一個數(shù)據(jù)時,其值都和事務(wù)開始時候的內(nèi)容是一致,禁止讀取到別的事務(wù)未提交的數(shù)據(jù)(會造成幻讀)。
臟讀 :表示一個事務(wù)能夠讀取另一個事務(wù)中還未提交的數(shù)據(jù)。比如,某個事務(wù)嘗試插入記錄 A,此時該事務(wù)還未提交,然后另一個事務(wù)嘗試讀取到了記錄 A。
不可重復(fù)讀 :是指在一個事務(wù)內(nèi),多次讀同一數(shù)據(jù)。
幻讀 :指同一個事務(wù)內(nèi)多次查詢返回的結(jié)果集不一樣。比如同一個事務(wù) A 第一次查詢時候有 n 條記錄,但是第二次同等條件下查詢卻有 n+1 條記錄,這就好像產(chǎn)生了幻覺。發(fā)生幻讀的原因也是另外一個事務(wù)新增或者刪除或者修改了第一個事務(wù)結(jié)果集里面的數(shù)據(jù),同一個記錄的數(shù)據(jù)內(nèi)容被修改了,所有數(shù)據(jù)行的記錄就變多或者變少了。
11. 說一下 MySQL 常用的引擎?
InnoDB 引擎:InnoDB 引擎提供了對數(shù)據(jù)庫 acid 事務(wù)的支持,并且還提供了行級鎖和外鍵的約束,它的設(shè)計的目標(biāo)就是處理大數(shù)據(jù)容量的數(shù)據(jù)庫系統(tǒng)。MySQL 運行的時候,InnoDB 會在內(nèi)存中建立緩沖池,用于緩沖數(shù)據(jù)和索引。但是該引擎是不支持全文搜索,同時啟動也比較的慢,它是不會保存表的行數(shù)的,所以當(dāng)進行 select count(*) from table 指令的時候,需要進行掃描全表。由于鎖的粒度小,寫操作是不會鎖定全表的,所以在并發(fā)度較高的場景下使用會提升效率的。
12. 說一下 MySQL 的行鎖和表鎖?
MyISAM 只支持表鎖,InnoDB 支持表鎖和行鎖,默認(rèn)為行鎖。
表級鎖:開銷小,加鎖快,不會出現(xiàn)死鎖。鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)量最低。
13. 說一下樂觀鎖和悲觀鎖?
樂觀鎖:每次去拿數(shù)據(jù)的時候都認(rèn)為別人不會修改,所以不會上鎖,但是在提交更新的時候會判斷一下在此期間別人有沒有去更新這個數(shù)據(jù)。
數(shù)據(jù)庫的樂觀鎖需要自己實現(xiàn),在表里面添加一個 version 字段,每次修改成功值加 1,這樣每次修改的時候先對比一下,自己擁有的 version 和數(shù)據(jù)庫現(xiàn)在的 version 是否一致,如果不一致就不修改,這樣就實現(xiàn)了樂觀鎖。
14. MySQL 問題排查都有哪些手段?
使用 show processlist 命令查看當(dāng)前所有連接信息。
使用 explain 命令查詢 SQL 語句執(zhí)行計劃。
15. 如何做 MySQL 的性能優(yōu)化?
為搜索字段創(chuàng)建索引。
避免使用 select *,列出需要查詢的字段。
垂直分割分表。
結(jié)語
就以這段話自勉、共勉吧。越努力、越幸運,如果你不是官二代、富二代、紅二代,那么請記?。呵趭^才是改變你命運的唯一捷徑。
歡迎在留言區(qū)留下你的觀點,一起討論提高。如果今天的文章讓你有新的啟發(fā),學(xué)習(xí)能力的提升上有新的認(rèn)識,歡迎轉(zhuǎn)發(fā)分享給更多人。
歡迎各位讀者加入程序員**知識碼頭**技術(shù)群,在公眾號后臺回復(fù)“加群”即可。
cdn.xitu.io/2019/10/2/16d8a808b767b831?imageView2/0/w/1280/h/960/format/webp/ignore-error/1">
猜你還想看
關(guān)注「程序員知識碼頭」,收看更多精彩內(nèi)容
當(dāng)前標(biāo)題:【每日3分鐘技術(shù)干貨|面試題+答案|Mysql篇(一
鏈接地址:http://bm7419.com/article30/pscsso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、動態(tài)網(wǎng)站、軟件開發(fā)、企業(yè)建站、手機網(wǎng)站建設(shè)、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)