Mysql相關(guān)面試題

1.何為范式?

第一范式(1NF):第一范式就是無(wú)重復(fù)屬性的列。

第二范式(2NF):第二范式是在第一范式的基礎(chǔ)上建立起來(lái)的,即滿(mǎn)足第二范式必須先滿(mǎn)足第一范式委乌。第二范式要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或行必須可以被惟一地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列荣回,以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)遭贸。這個(gè)惟一屬性列被稱(chēng)為主關(guān)鍵字或主鍵、主碼心软。

第二范式要求實(shí)體的屬性完全依賴(lài)于主關(guān)鍵字壕吹。所謂完全依賴(lài)是指不能存在僅依賴(lài)主關(guān)鍵字一部分的屬性,如果存在删铃,那么這個(gè)屬性和主關(guān)鍵字的這一部分應(yīng)該分離出來(lái)形成一個(gè)新的實(shí)體耳贬,新實(shí)體與原實(shí)體之間是一對(duì)多的關(guān)系。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列猎唁,以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)咒劲。簡(jiǎn)而言之,第二范式就是非主屬性非部分依賴(lài)于主關(guān)鍵字诫隅。

第三范式(3NF):滿(mǎn)足 3NF 必須先滿(mǎn)足 2NF腐魂。簡(jiǎn)而言之,3NF 要求一個(gè)數(shù)據(jù)庫(kù)表中不包含已在其它表中已包含的非主關(guān)鍵字信息逐纬。例如蛔屹,存在一個(gè)部門(mén)信息表,其中每個(gè)部門(mén)有部門(mén)編號(hào)(dept_id)豁生、部門(mén)名稱(chēng)兔毒、部門(mén)簡(jiǎn)介等信息。那么在員工信息表中列出部門(mén)編號(hào)后就不能再將部門(mén)名稱(chēng)沛硅、部門(mén)簡(jiǎn)介等與部門(mén)有關(guān)的信息再加入員工信息表中眼刃。如果不存在部門(mén)信息表,則根據(jù)第三范式也應(yīng)該構(gòu)建它摇肌,否則就會(huì)有大量的數(shù)據(jù)冗余。簡(jiǎn)而言之仪际,第三范式就是屬性不依賴(lài)于其它非主屬性围小。

2.sql 語(yǔ)句優(yōu)化點(diǎn)有哪些昵骤?

  • 應(yīng)盡量避免在 where 子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描肯适。

  • 應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行 null 值判斷变秦,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:

select id from t where num is null

可以在 num 上設(shè)置默認(rèn)值 0框舔,確保表中 num 列沒(méi)有 null 值蹦玫,然后這樣查詢(xún):

select id from t where num=0

  • 很多時(shí)候用 exists 代替 in 是一個(gè)好的選擇

  • 用 Where 子句替換 HAVING 子句 因?yàn)?HAVING 只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過(guò)濾

3.索引是什么?有什么作用以及優(yōu)缺點(diǎn)刘绣?

索引是對(duì)數(shù)據(jù)庫(kù)表中一或多個(gè)列的值進(jìn)行排序的結(jié)構(gòu)樱溉,是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。

優(yōu)點(diǎn):

第一纬凤,通過(guò)創(chuàng)建唯一性索引福贞,可以保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性。

第二停士,可以大大加快 數(shù)據(jù)的檢索速度挖帘,這也是創(chuàng)建索引的最主要的原因。

第三恋技,可以加速表和表之間的連接拇舀,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。

第四蜻底,在使用分組和排序 子句進(jìn)行數(shù)據(jù)檢索時(shí)骄崩,同樣可以顯著減少查詢(xún)中分組和排序的時(shí)間。

第五朱躺,通過(guò)使用索引刁赖,可以在查詢(xún)的過(guò)程中,使用優(yōu)化隱藏器长搀,提高系統(tǒng)的性能啦租。

缺點(diǎn):

第一浑侥,創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間,這種時(shí)間隨著數(shù)據(jù) 量的增加而增加。

第二慕淡,索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外谅年,每一個(gè)索引還要占一定的物理空間稼病,如果要建立聚簇索引,那么需要的空間就會(huì)更大良蛮。

第三抽碌,當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候决瞳,索引也要?jiǎng)討B(tài)的維護(hù)货徙,這樣就降低了數(shù)據(jù)的維護(hù)速度左权。

4.索引的實(shí)現(xiàn)?

平衡多路搜索樹(shù)B樹(shù)(B-tree)痴颊。B樹(shù)(Balance Tree)又叫做B- 樹(shù)(其實(shí)B-是由B-tree翻譯過(guò)來(lái)赏迟,所以B-樹(shù)和B樹(shù)是一個(gè)概念) ,它就是一種平衡多路查找樹(shù)蠢棱。下圖就是一個(gè)典型的B樹(shù):


image.png

5.什么是事務(wù)锌杀?

事務(wù)(Transaction)是并發(fā)控制的基本單位。所謂的事務(wù)泻仙,它是一個(gè)操作序列糕再,這些操作要么都執(zhí)行,要么都不執(zhí)行饰豺,它是一個(gè)不可分割的工作單位亿鲜。事務(wù)是數(shù)據(jù)庫(kù)維護(hù)數(shù)據(jù)一致性的單位,在每個(gè)事務(wù)結(jié)束時(shí)冤吨,都能保持?jǐn)?shù)據(jù)一致性蒿柳。

6.數(shù)據(jù)庫(kù)的樂(lè)觀鎖和悲觀鎖是什么?

數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中的并發(fā)控制的任務(wù)是確保在多個(gè)事務(wù)同時(shí)存取數(shù)據(jù)庫(kù)中同一數(shù)據(jù)時(shí)不破壞事務(wù)的隔離性和統(tǒng)一性以及數(shù)據(jù)庫(kù)的統(tǒng)一性漩蟆。
樂(lè)觀并發(fā)控制(樂(lè)觀鎖)和悲觀并發(fā)控制(悲觀鎖)是并發(fā)控制主要采用的技術(shù)手段垒探。
悲觀鎖:假定會(huì)發(fā)生并發(fā)沖突,屏蔽一切可能違反數(shù)據(jù)完整性的操作
樂(lè)觀鎖:假設(shè)不會(huì)發(fā)生并發(fā)沖突怠李,只在提交操作時(shí)檢查是否違反數(shù)據(jù)完整性圾叼。

7.簡(jiǎn)單說(shuō)一說(shuō)drop、delete與truncate的區(qū)別

SQL中的drop捺癞、delete夷蚊、truncate都表示刪除,但是三者有一些差別髓介。
delete和truncate只刪除表的數(shù)據(jù)不刪除表的結(jié)構(gòu)
速度,一般來(lái)說(shuō): drop> truncate >delete
delete語(yǔ)句是dml,這個(gè)操作會(huì)放到rollback segement中,事務(wù)提交之后才生效;
如果有相應(yīng)的trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā). truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.
如果你對(duì)這三者的用法還不太熟悉惕鼓,建議閱讀: drop、truncate和delete的區(qū)別

8.drop唐础、delete與truncate分別在什么場(chǎng)景之下使用箱歧?

1.不再需要一張表的時(shí)候,用drop一膨。
2.想刪除部分?jǐn)?shù)據(jù)行時(shí)候呀邢,用delete,并且?guī)蟱here子句
3.保留表而刪除所有數(shù)據(jù)的時(shí)候用truncate

9.什么是視圖豹绪?以及視圖的使用場(chǎng)景有哪些价淌?

視圖是一種虛擬的表,具有和物理表相同的功能∈涔常可以對(duì)視圖進(jìn)行增豺型,改仲智,查买乃,操作,試圖通常是有一個(gè)表或者多個(gè)表的行或列的子集钓辆。對(duì)視圖的修改不影響基本表剪验。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢(xún)前联。
只暴露部分字段給訪問(wèn)者功戚,所以就建一個(gè)虛表,就是視圖似嗤。
查詢(xún)的數(shù)據(jù)來(lái)源于不同的表啸臀,而查詢(xún)者希望以統(tǒng)一的方式查詢(xún),這樣也可以建立一個(gè)視圖烁落,把多個(gè)表查詢(xún)結(jié)果聯(lián)合起來(lái)乘粒,查詢(xún)者只需要直接從視圖中獲取數(shù)據(jù),不必考慮數(shù)據(jù)來(lái)源于不同表所帶來(lái)的差異伤塌。

10.MySQL的復(fù)制原理以及流程

binlog線程——記錄下所有改變了數(shù)據(jù)庫(kù)數(shù)據(jù)的語(yǔ)句灯萍,放進(jìn)master上的binlog中;
從:io線程——在使用start slave 之后每聪,負(fù)責(zé)從master上拉取 binlog 內(nèi)容旦棉,放進(jìn) 自己的relay log中;
從:sql執(zhí)行線程——執(zhí)行relay log中的語(yǔ)句药薯;

11.MySQL中myisam與innodb的區(qū)別绑洛,至少5點(diǎn)

InnoDB支持事物,而MyISAM不支持事物
InnoDB支持行級(jí)鎖童本,而MyISAM支持表級(jí)鎖
InnoDB支持MVCC, 而MyISAM不支持
InnoDB支持外鍵真屯,而MyISAM不支持
InnoDB不支持全文索引,而MyISAM支持巾陕。

12.innodb引擎的4大特性

插入緩沖(insert buffer)
二次寫(xiě)(double write)
自適應(yīng)哈希索引(ahi)
預(yù)讀(read ahead)

13.innodb的事務(wù)與日志的實(shí)現(xiàn)方式

(1)讨跟、有多少種日志;錯(cuò)誤日志:記錄出錯(cuò)信息鄙煤,也記錄一些警告信息或者正確的信息晾匠。查詢(xún)?nèi)罩荆河涗浰袑?duì)數(shù)據(jù)庫(kù)請(qǐng)求的信息,不論這些請(qǐng)求是否得到了正確的執(zhí)行梯刚。慢查詢(xún)?nèi)罩荆涸O(shè)置一個(gè)閾值凉馆,將運(yùn)行時(shí)間超過(guò)該值的所有SQL語(yǔ)句都記錄到慢查詢(xún)的日志文件中。二進(jìn)制日志:記錄對(duì)數(shù)據(jù)庫(kù)執(zhí)行更改的所有操作。中繼日志:事務(wù)日志:
(2)澜共、事物的4種隔離級(jí)別隔離級(jí)別讀未提交(RU)讀已提交(RC)可重復(fù)讀(RR)串行
(3)向叉、事務(wù)是如何通過(guò)日志來(lái)實(shí)現(xiàn)的,說(shuō)得越深入越好嗦董。事務(wù)日志是通過(guò)redo和innodb的存儲(chǔ)引擎日志緩沖(Innodb log buffer)來(lái)實(shí)現(xiàn)的母谎,當(dāng)開(kāi)始一個(gè)事務(wù)的時(shí)候,會(huì)記錄該事務(wù)的lsn(log sequence number)號(hào); 當(dāng)事務(wù)執(zhí)行時(shí)京革,會(huì)往InnoDB存儲(chǔ)引擎的日志的日志緩存里面插入事務(wù)日志奇唤;當(dāng)事務(wù)提交時(shí),必須將存儲(chǔ)引擎的日志緩沖寫(xiě)入磁盤(pán)(通過(guò)innodb_flush_log_at_trx_commit來(lái)控制)匹摇,也就是寫(xiě)數(shù)據(jù)前咬扇,需要先寫(xiě)日志。這種方式稱(chēng)為“預(yù)寫(xiě)日志方式”廊勃。

14.MySQL中InnoDB引擎的行鎖是通過(guò)加在什么上完成(或稱(chēng)實(shí)現(xiàn))的懈贺?為什么是這樣子的?

InnoDB是基于索引來(lái)完成行鎖例: select * from tab_with_index where id = 1 for update;for update 可以根據(jù)條件來(lái)完成行鎖鎖定,并且 id 是有索引鍵的列,如果 id 不是索引鍵那么InnoDB將完成表鎖,并發(fā)將無(wú)從談起坡垫。

15.問(wèn)了下MySQL數(shù)據(jù)庫(kù)cpu飆升到500%的話(huà)他怎么處理梭灿?

列出所有進(jìn)程 show processlist 觀察所有進(jìn)程 多秒沒(méi)有狀態(tài)變化的(干掉)查看超時(shí)日志或者錯(cuò)誤日志 (做了幾年開(kāi)發(fā),一般會(huì)是查詢(xún)以及大批量的插入會(huì)導(dǎo)致cpu與i/o上漲,,,,當(dāng)然不排除網(wǎng)絡(luò)狀態(tài)突然斷了,,導(dǎo)致一個(gè)請(qǐng)求服務(wù)器只接受到一半,比如where子句或分頁(yè)子句沒(méi)有發(fā)送,當(dāng)然的一次被坑經(jīng)歷)葛虐。

16.你們數(shù)據(jù)庫(kù)是否支持emoji表情胎源,如果不支持,如何操作屿脐?

如果是utf8字符集的話(huà)涕蚤,需要升級(jí)至utf8_mb4方可支持。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末的诵,一起剝皮案震驚了整個(gè)濱河市万栅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌西疤,老刑警劉巖烦粒,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異代赁,居然都是意外死亡扰她,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)芭碍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)徒役,“玉大人,你說(shuō)我怎么就攤上這事窖壕∮俏穑” “怎么了杉女?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鸳吸。 經(jīng)常有香客問(wèn)我熏挎,道長(zhǎng),這世上最難降的妖魔是什么晌砾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任坎拐,我火速辦了婚禮,結(jié)果婚禮上贡羔,老公的妹妹穿的比我還像新娘廉白。我一直安慰自己,他們只是感情好乖寒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著院溺,像睡著了一般楣嘁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珍逸,一...
    開(kāi)封第一講書(shū)人閱讀 51,215評(píng)論 1 299
  • 那天逐虚,我揣著相機(jī)與錄音,去河邊找鬼谆膳。 笑死叭爱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漱病。 我是一名探鬼主播买雾,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼杨帽!你這毒婦竟也來(lái)了漓穿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤注盈,失蹤者是張志新(化名)和其女友劉穎晃危,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體老客,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡僚饭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胧砰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳍鸵。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖朴则,靈堂內(nèi)的尸體忽然破棺而出权纤,到底是詐尸還是另有隱情钓简,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布汹想,位于F島的核電站外邓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏古掏。R本人自食惡果不足惜损话,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望槽唾。 院中可真熱鬧丧枪,春花似錦、人聲如沸庞萍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钝计。三九已至恋博,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間私恬,已是汗流浹背债沮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留本鸣,地道東北人疫衩。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像荣德,于是被迫代替她去往敵國(guó)和親闷煤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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