MYSQL基礎(chǔ)面試題


1映胁、數(shù)據(jù)庫三大范式你能說一下嗎木羹?

第一范式:1NF是對屬性的原子性約束,要求字段具有原子性解孙,不可再分解汇跨;比如有一張學生表(學號,學生姓名妆距,聯(lián)系方式)穷遂,表主鍵為學號,因為學生的聯(lián)系方式又可以拆分為手機號和家庭座機娱据,這時候為了滿足1NF蚪黑,需要將聯(lián)系方式字段拆分為手機號和家庭座機兩個字段。

第二范式:2NF是在滿足第一范式的前提下中剩,非主鍵字段不能出現(xiàn)部分依賴主鍵忌穿;比如有一張學生表(學號,學生姓名结啼,年齡)掠剑,表主鍵為(學號,學生姓名)郊愧,此時表設(shè)計是不滿足2NF的朴译,因為年齡部分依賴于主鍵,主鍵可以決定年齡属铁,但是復(fù)合主鍵內(nèi)的學號也可以決定年齡眠寿,為了滿足2NF,需要將復(fù)合主鍵拆分為以學號為主鍵的表設(shè)計焦蘑。

第三范式:3NF是在滿足第二范式的前提下盯拱,非主鍵字段不能出現(xiàn)傳遞依賴,比如有一張學生表(學號,姓名狡逢, 年齡宁舰, 學院編號, 學院地點)奢浑,表主鍵為學號蛮艰,此時表設(shè)計是滿足2NF的,(學號) → (姓名, 年齡, 所在學院, 學院地點)殷费,但是是不滿足3NF的印荔,因為存在著(學號) → (學院編號) → (學院地點)的傳遞依賴關(guān)系低葫,學院地點不是直接依賴于學號详羡,而是通過學院編號依賴于學號,為了滿足3NF嘿悬,應(yīng)該將表拆分实柠,學號,姓名善涨, 年齡窒盐, 學院編號),(學院編號钢拧, 學院地點)蟹漓。

2、sql語句分類:

DDL:數(shù)據(jù)定義語言(create drop)

DML:數(shù)據(jù)操作語句(insert update delete)

DQL:數(shù)據(jù)查詢語句(select )

DCL:數(shù)據(jù)控制語句源内,進行授權(quán)和權(quán)限回收(grant revoke)

TPL:數(shù)據(jù)事務(wù)語句(commit collback savapoint)

3葡粒、SQL 的 select 語句完整的執(zhí)行順序

1、from 子句組裝來自不同數(shù)據(jù)源的數(shù)據(jù)膜钓;
2嗽交、where 子句基于指定的條件對記錄行進行篩選;
3颂斜、group by 子句將數(shù)據(jù)劃分為多個分組夫壁;
4、使用聚集函數(shù)進行計算沃疮;
5盒让、使用 having 子句篩選分組;
6司蔬、計算所有的表達式糯彬;
7、select 的字段葱她;
8撩扒、使用 order by 對結(jié)果集進行排序。

4、delete搓谆、drop炒辉、truncate區(qū)別

truncate 和 delete只刪除數(shù)據(jù),不刪除表結(jié)構(gòu) ,drop刪除表結(jié)構(gòu)泉手,并且釋放所占的空間黔寇。
刪除數(shù)據(jù)的速度,drop> truncate > delete

delete屬于DML語言斩萌,需要事務(wù)管理缝裤,commit之后才能生效。drop和truncate屬于DDL語言颊郎,操作立刻生效憋飞,不可回滾。

使用場合:
當你不再需要該表時姆吭, 用 drop;
當你仍要保留該表榛做,但要刪除所有記錄時, 用 truncate;
當你要刪除部分記錄時(always with a where clause), 用 delete.

注意: 對于有主外鍵關(guān)系的表内狸,不能使用truncate而應(yīng)該使用不帶where子句的delete語句检眯,由于truncate不記錄在日志中,不能夠激活觸發(fā)器昆淡。


5锰瘸、char和varchar的區(qū)別?

char 是一種固定長度的字符串類型昂灵,(如果數(shù)據(jù)類型不足固定長度的話避凝,會自動用0補齊)
varchar 是一種可變長度的字符串類型,(如果數(shù)據(jù)類型不足長度的話倔既,自動將長度縮放成我們所輸入的數(shù)據(jù)類型的長度)

6恕曲、事務(wù)是什么?事務(wù)的四大特性是什么渤涌?

??事務(wù)是一組原子性的 SQL 語句佩谣,或者說一個獨立的工作單元。如果數(shù)據(jù)庫引擎能夠成功地對數(shù)據(jù)庫應(yīng)用該組操作的全部語句实蓬,那么就執(zhí)行該組查詢茸俭。如果其中任何一條語句因為崩潰或其他原因無法執(zhí)行,那么所有的語句都不會執(zhí)行安皱。也就是說调鬓,事務(wù)內(nèi)的語句,要么全部執(zhí)行成功酌伊,要么全部執(zhí)行失敗腾窝。

原子性:不可分割的操作單元,事務(wù)中所有操作,要么全部成功虹脯;要么撤回到執(zhí)行事務(wù)之前的狀態(tài)驴娃;

一致性:如果在執(zhí)行事務(wù)之前數(shù)據(jù)庫是一致的,那么在執(zhí)行事務(wù)之后數(shù)據(jù)庫也還是一致的循集;

隔離性:事務(wù)操作之間彼此獨立和透明互不影響唇敞。事務(wù)獨立運行。這通常使用鎖來實現(xiàn)咒彤。一個事務(wù)處理后的結(jié)果疆柔,影響了其他事務(wù),那么其他事務(wù)會撤回镶柱。事務(wù)的100%隔離旷档,需要犧牲速度。

持久性:事務(wù)一旦提交奸例,其結(jié)果就是永久的彬犯。即便發(fā)生系統(tǒng)故障向楼,也能恢復(fù)查吊。

7、事務(wù)的隔離級別湖蜕,mysql默認的隔離級別是什么逻卖?

讀未提交(Read uncommitted),一個事務(wù)可以讀取另一個未提交事務(wù)的數(shù)據(jù)昭抒,最低級別评也,任何情況都無法保證。

讀已提交(Read committed)灭返,一個事務(wù)要等另一個事務(wù)提交后才能讀取數(shù)據(jù)盗迟,可避免臟讀的發(fā)生。

可重復(fù)讀(Repeatable read)熙含,就是在開始讀取數(shù)據(jù)(事務(wù)開啟)時罚缕,不再允許修改操作,可避免臟讀怎静、不可重復(fù)讀的發(fā)生邮弹。

串行(Serializable),是最高的事務(wù)隔離級別蚓聘,在該級別下腌乡,事務(wù)串行化順序執(zhí)行,可以避免臟讀夜牡、不可重復(fù)讀與幻讀与纽。但是這種事務(wù)隔離級別效率低下,比較耗數(shù)據(jù)庫性能,一般不使用急迂。

MySQL的默認隔離級別是Repeatable read硝岗。

8、索引是什么袋毙?它是如何加快查詢性能的型檀?

索引是對數(shù)據(jù)庫表中一列或多列的值進行排序的一種數(shù)據(jù)結(jié)構(gòu),也就是說索引是一種數(shù)據(jù)結(jié)構(gòu)听盖。數(shù)據(jù)庫在執(zhí)行一條Sql語句的時候胀溺,默認的方式是根據(jù)搜索條件進行全表掃描,遇到匹配條件的就加入搜索結(jié)果集合皆看。如果我們對某一字段增加索引仓坞,查詢時就會先去索引列表中通過二分法等高效率算法一次定位到特定值的行數(shù),大大減少遍歷匹配的行數(shù)腰吟,所以能明顯增加查詢性能无埃。類似新華字典的目錄,如果沒有目錄的話毛雇,我們想要查找一個漢字的話嫉称,就必須檢索整本字典,而正因為有了目錄灵疮,我們只要知道我們所要查找的偏旁或者拼音首字母织阅,就可以快速地定位到我們想要查找漢字的所在頁碼。

9震捣、MySQL主要的索引類型

普通索引:是最基本的索引荔棉,它沒有任何限制;

唯一索引:索引列的值必須唯一蒿赢,但允許有空值润樱。如果是組合索引,則列值的組合必須唯一羡棵;

主鍵索引:是一種特殊的唯一索引壹若,一個表只能有一個主鍵,不允許有空值晾腔;

組合索引:指多個字段上創(chuàng)建的索引舌稀,只有在查詢條件中使用了創(chuàng)建索引時的第一個字段,索引才會被使用灼擂。使用組合索引時遵循最左前綴集合壁查;

全文索引:主要用來查找文本中的關(guān)鍵字,而不是直接與索引中的值相比較剔应,MySQL中MyISAM支持全文索引而InnoDB不支持睡腿;

10语御、說一說什么是外鍵?它的優(yōu)缺點是什么席怪?

??外鍵指的是外鍵約束应闯,目的是保持數(shù)據(jù)一致性,完整性挂捻,控制存儲在外鍵表中的數(shù)據(jù),使兩張表形成關(guān)聯(lián)碉纺,外鍵只能引用外表中列的值;

優(yōu)點:由數(shù)據(jù)庫自身保證數(shù)據(jù)一致性刻撒,完整性骨田,更可靠,因為程序很難100%保證數(shù)據(jù)的完整性声怔,而用外鍵即使在數(shù)據(jù)庫服務(wù)器當機或者出現(xiàn)其他問題的時候态贤,也能夠最大限度的保證數(shù)據(jù)的一致性和完整性。有主外鍵的數(shù)據(jù)庫設(shè)計可以增加ER圖的可讀性醋火,這點在數(shù)據(jù)庫設(shè)計時非常重要悠汽。外鍵在一定程度上說明的業(yè)務(wù)邏輯,會使設(shè)計周到具體全面芥驳。

缺點:可以用觸發(fā)器或應(yīng)用程序保證數(shù)據(jù)的完整性柿冲;過分強調(diào)或者說使用外鍵會平添開發(fā)難度,導(dǎo)致表過多晚树,更改業(yè)務(wù)困難姻采,擴展困難等問題雅采;不用外鍵時數(shù)據(jù)管理簡單爵憎,操作方便,性能高(導(dǎo)入導(dǎo)出等操作婚瓜,在insert, update, delete 數(shù)據(jù)的時候更快)宝鼓;

11、在什么時候你會選擇使用外鍵巴刻,為什么愚铡?

??在我的業(yè)務(wù)邏輯非常簡單,業(yè)務(wù)一旦確定不會輕易更改胡陪,表結(jié)構(gòu)簡單沥寥,業(yè)務(wù)量小的時候我會選擇使用外鍵。因為當不符合以上條件的時候柠座,外鍵會影響業(yè)務(wù)的擴展和修改邑雅,當數(shù)據(jù)量龐大時,會嚴重影響增刪改查的效率妈经。

12淮野、說一說你能想到的sql語句優(yōu)化捧书,至少五種

1)避免select *,將需要查找的字段列出來骤星;

2)使用連接(join)來代替子查詢经瓷;

3)拆分大的delete或insert語句;

4)使用limit對查詢結(jié)果的記錄進行限定洞难;

5)用 exists 代替 in 是一個好的選擇舆吮;

6)用Where子句替換HAVING 子句 因為HAVING 只會在檢索出所有記錄之后才對結(jié)果集進行過濾;

7)不要在 where 子句中的“=”左邊進行函數(shù)队贱、算術(shù)運算或其他表達式運算歪泳,否則系統(tǒng)將可能無法正確使用索引盡量避免在where 子句中對字段進行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描露筒;

8)盡量避免在 where 子句中使用 or 來連接條件呐伞,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描;

9)盡量避免在 where 子句中使用!=或<>操作符慎式,否則將引擎放棄使用索引而進行全表掃描伶氢;

13、MyISAM與InnoDB的區(qū)別瘪吏?

1)InnoDB 支持事務(wù)癣防;MyISAM 不支持事務(wù);
2)InnoDB 支持行級鎖掌眠;MyISAM 支持表級鎖蕾盯;
3)InnoDB 支持 MVCC(多版本并發(fā)控制);MyISAM 不支持蓝丙;
4)InnoDB 支持外鍵级遭,MyISAM 不支持;
5)InnoDB 不支持全文索引渺尘;MyISAM 支持挫鸽;
6)InnoDB 不保存表的總行數(shù),執(zhí)行 select count(*) from table 時需要全表掃描鸥跟;MyISAM 用一個變量保存表的總行數(shù)丢郊,查總行數(shù)速度很快;
7)InnoDB 是聚集索引医咨,數(shù)據(jù)文件是和索引綁在一起的枫匾,必須要有主鍵,通過主鍵索引效率很高拟淮。輔助索引需要兩次查詢干茉,先查詢到主鍵,再通過主鍵查詢到數(shù)據(jù)惩歉。主鍵太大等脂,其他索引也會很大俏蛮;MyISAM 是非聚集索引,數(shù)據(jù)文件是分離的上遥,索引保存的是數(shù)據(jù)文件的指針搏屑,主鍵索引和輔助索引是獨立的。

后續(xù)補充

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粉楚,一起剝皮案震驚了整個濱河市辣恋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌模软,老刑警劉巖伟骨,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異燃异,居然都是意外死亡携狭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門回俐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逛腿,“玉大人,你說我怎么就攤上這事仅颇〉ツ” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵忘瓦,是天一觀的道長搁廓。 經(jīng)常有香客問我,道長耕皮,這世上最難降的妖魔是什么境蜕? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮明场,結(jié)果婚禮上汽摹,老公的妹妹穿的比我還像新娘。我一直安慰自己苦锨,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布趴泌。 她就那樣靜靜地躺著舟舒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗜憔。 梳的紋絲不亂的頭發(fā)上秃励,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音吉捶,去河邊找鬼夺鲜。 笑死皆尔,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的币励。 我是一名探鬼主播慷蠕,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼食呻!你這毒婦竟也來了流炕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤仅胞,失蹤者是張志新(化名)和其女友劉穎每辟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體干旧,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡渠欺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了椎眯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峻堰。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盅视,靈堂內(nèi)的尸體忽然破棺而出捐名,到底是詐尸還是另有隱情,我是刑警寧澤闹击,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布镶蹋,位于F島的核電站,受9級特大地震影響赏半,放射性物質(zhì)發(fā)生泄漏贺归。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一断箫、第九天 我趴在偏房一處隱蔽的房頂上張望拂酣。 院中可真熱鬧,春花似錦仲义、人聲如沸婶熬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赵颅。三九已至,卻和暖如春暂刘,著一層夾襖步出監(jiān)牢的瞬間饺谬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工谣拣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留募寨,地道東北人族展。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像拔鹰,于是被迫代替她去往敵國和親仪缸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應(yīng)的列上鍵入重復(fù)值時格郁,會觸發(fā)此異常腹殿。 O...
    我想起個好名字閱讀 5,307評論 0 9
  • 主鍵,外鍵例书,超鍵锣尉,候選鍵 數(shù)據(jù)庫事務(wù)的四個特征及含義 視圖的作用,可以更改嗎 視圖是虛擬的表决采;只包含動態(tài)檢索數(shù)據(jù)的...
    DamaoShao閱讀 6,250評論 0 3
  • 數(shù)據(jù)庫常見面試題(開發(fā)者篇) 什么是存儲過程自沧?有哪些優(yōu)缺點? 什么是存儲過程树瞭?有哪些優(yōu)缺點拇厢? 存儲過程就像我們編程...
    Java3y閱讀 4,784評論 4 144
  • 一.索引 1.索引是什么 索引是對數(shù)據(jù)庫中一或多個列值的排序,幫助數(shù)據(jù)庫高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)假如我們用類比的方法...
    TechTalker閱讀 4,792評論 0 0
  • 今天晒喷,不滿打滿算孝偎,可以稱為第一天。 僅僅是收拾東西出發(fā)而已凉敲,就讓人激動衣盾、緊張、興奮不已爷抓。 出發(fā)前老生常談的安全势决,此...
    女漢子may穎閱讀 218評論 0 0