死磕這50道MySQL面試題越走,阿里面試官直呼內(nèi)行(上)

前言

所謂金三銀四,想要跳槽進(jìn)大廠的朋友們這段時(shí)間應(yīng)該也都在積極準(zhǔn)備了,MySQL作為最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一廊敌,其重要性想必不需要我多說铜跑,在面試中也幾乎是必問的,而且大一點(diǎn)的公司的話都會問得挺深骡澈。

那么現(xiàn)在準(zhǔn)備得差不多或者壓根還沒準(zhǔn)備但是又想進(jìn)大廠的朋友锅纺,可以一起來看看我給大家整理的這些關(guān)于MySQL的經(jīng)典面試題,你是否都能答得出來呢肋殴?

image

PS:完整版面試題PDF以及MySQL學(xué)習(xí)筆記

1囤锉、MySQL 中有哪幾種鎖?

1护锤、表級鎖:開銷小官地,加鎖快;不會出現(xiàn)死鎖烙懦;鎖定粒度大驱入,發(fā)生鎖沖突的概率最高,并發(fā)度最低氯析。

2亏较、行級鎖:開銷大,加鎖慢掩缓;會出現(xiàn)死鎖雪情;鎖定粒度最小,發(fā)生鎖沖突的概率最低你辣,并發(fā)度也最高巡通。

3、頁面鎖:開銷和加鎖時(shí)間界于表鎖和行鎖之間舍哄;會出現(xiàn)死鎖宴凉;鎖定粒度界于表鎖和行鎖之間,并發(fā)度一般蠢熄。

2跪解、MySQL 中有哪些不同的表格炉旷?

共有 5 種類型的表格:

1签孔、MyISAM

2、Heap

3窘行、Merge

4饥追、INNODB

5、ISAM

3罐盔、簡述在 MySQL 數(shù)據(jù)庫中 MyISAM 和 InnoDB 的區(qū)別

在這里插入圖片描述

MyISAM:

不支持事務(wù)但绕,但是每次查詢都是原子的;

支持表級鎖,即每次操作是對整個(gè)表加鎖捏顺;

存儲表的總行數(shù)六孵;

一個(gè) MYISAM 表有三個(gè)文件:索引文件、表結(jié)構(gòu)文件幅骄、數(shù)據(jù)文件劫窒;

采用菲聚集索引,索引文件的數(shù)據(jù)域存儲指向數(shù)據(jù)文件的指針拆座。輔索引與主索引基本一致主巍,但是輔索引不用保證唯一性。

InnoDb:

支持 ACID 的事務(wù)挪凑,支持事務(wù)的四種隔離級別孕索;

支持行級鎖及外鍵約束:因此可以支持寫并發(fā);

不存儲總行數(shù):

一個(gè) InnoDb 引擎存儲在一個(gè)文件空間(共享表空間躏碳,表大小不受操作系統(tǒng)控制搞旭,一個(gè)表可能分布在多個(gè)文件里),也有可能為多個(gè)(設(shè)置為獨(dú)立表空唐断,表大小受操作系統(tǒng)文件大小限制选脊,一般為 2G),受操作系統(tǒng)文件大小的限制脸甘;

主鍵索引采用聚集索引(索引的數(shù)據(jù)域存儲數(shù)據(jù)文件本身)恳啥,輔索引的數(shù)據(jù)域存儲主鍵的值;

因此從輔索引查找數(shù)據(jù)丹诀,需要先通過輔索引找到主鍵值钝的,再訪問輔索引;

最好使用自增主鍵铆遭,防止插入數(shù)據(jù)時(shí)硝桩,為維持 B+樹結(jié)構(gòu),文件的大調(diào)整枚荣。

4碗脊、MySQL 中 InnoDB 支持的四種事務(wù)隔離級別名稱,以及逐級之間的區(qū)別橄妆?

SQL 標(biāo)準(zhǔn)定義的四個(gè)隔離級別為:

1衙伶、read uncommited :讀到未提交數(shù)據(jù)

2、read committed:臟讀害碾,不可重復(fù)讀

3矢劲、repeatable read:可重讀

4、serializable :串行事物

5慌随、CHAR 和 VARCHAR 的區(qū)別芬沉?

1躺同、CHAR 和 VARCHAR 類型在存儲和檢索方面有所不同

2、CHAR 列長度固定為創(chuàng)建表時(shí)聲明的長度丸逸,長度值范圍是 1 到 255 當(dāng) CHAR值被存儲時(shí)蹋艺,它們被用空格填充到特定長度,檢索 CHAR 值時(shí)需刪除尾隨空格黄刚。

6车海、主鍵和候選鍵有什么區(qū)別?

表格的每一行都由主鍵唯一標(biāo)識,一個(gè)表只有一個(gè)主鍵隘击。

主鍵也是候選鍵侍芝。按照慣例,候選鍵可以被指定為主鍵埋同,并且可以用于任何外鍵

引用州叠。

7、myisamchk 是用來做什么的凶赁?

它用來壓縮 MyISAM 表咧栗,這減少了磁盤或內(nèi)存使用。

MyISAM Static 和 MyISAM Dynamic 有什么區(qū)別虱肄?

在 MyISAM Static 上的所有字段有固定寬度致板。動態(tài) MyISAM 表將具有像 TEXT,BLOB 等字段咏窿,以適應(yīng)不同長度的數(shù)據(jù)類型斟或。

MyISAM Static 在受損情況下更容易恢復(fù)。

8集嵌、如果一個(gè)表有一列定義為 TIMESTAMP萝挤,將發(fā)生什么?

timetsamp

每當(dāng)行被更改時(shí)根欧,時(shí)間戳字段將獲取當(dāng)前時(shí)間戳怜珍。

列設(shè)置為 AUTO INCREMENT 時(shí),如果在表中達(dá)到最大值凤粗,會發(fā)生什么情況酥泛?

它會停止遞增,任何進(jìn)一步的插入都將產(chǎn)生錯(cuò)誤嫌拣,因?yàn)槊荑€已被使用柔袁。

怎樣才能找出最后一次插入時(shí)分配了哪個(gè)自動增量?

LAST_INSERT_ID 將返回由 Auto_increment 分配的最后一個(gè)值亭罪,并且不需要指

定表名稱瘦馍。

9歼秽、你怎么看到為表格定義的所有索引应役?

索引是通過以下方式為表格定義的:

SHOW INDEX FROM <tablename>;

10、LIKE 聲明中的%和_是什么意思?

%對應(yīng)于 0 個(gè)或更多字符箩祥,_只是 LIKE 語句中的一個(gè)字符院崇。

如何在 Unix 和 MySQL 時(shí)間戳之間進(jìn)行轉(zhuǎn)換?

UNIX_TIMESTAMP 是從 MySQL 時(shí)間戳轉(zhuǎn)換為 Unix 時(shí)間戳的命令

FROM_UNIXTIME 是從 Unix 時(shí)間戳轉(zhuǎn)換為 MySQL 時(shí)間戳的命令

11袍祖、列對比運(yùn)算符是什么底瓣?

在 SELECT 語句的列比較中使用=,<>蕉陋,<=捐凭,<,> =凳鬓,>茁肠,<<,>>缩举,<=>垦梆,AND,OR 或 LIKE 運(yùn)算符仅孩。

12托猩、BLOB 和 TEXT 有什么區(qū)別?

BLOB 是一個(gè)二進(jìn)制對象辽慕,可以容納可變數(shù)量的數(shù)據(jù)京腥。TEXT 是一個(gè)不區(qū)分大小寫的 BLOB。

BLOB 和 TEXT 類型之間的唯一區(qū)別在于對 BLOB 值進(jìn)行排序和比較時(shí)區(qū)分大小寫溅蛉,對 TEXT 值不區(qū)分大小寫绞旅。

13、MySQL_fetch_array 和 MySQL_fetch_object 的區(qū)別是什么温艇?

以下是 MySQL_fetch_array 和 MySQL_fetch_object 的區(qū)別:

MySQL_fetch_array() – 將結(jié)果行作為關(guān)聯(lián)數(shù)組或來自數(shù)據(jù)庫的常規(guī)數(shù)組返回因悲。

MySQL_fetch_object – 從數(shù)據(jù)庫返回結(jié)果行作為對象。

14勺爱、MyISAM 表格將在哪里存儲晃琳,并且還提供其存儲格式?

每個(gè) MyISAM 表格以三種格式存儲在磁盤上:

·“.frm”文件存儲表定義

·數(shù)據(jù)文件具有“.MYD”(MYData)擴(kuò)展名

索引文件具有“.MYI”(MYIndex)擴(kuò)展名

15琐鲁、MySQL 如何優(yōu)化 DISTINCT卫旱?

DISTINCT 在所有列上轉(zhuǎn)換為 GROUP BY,并與 ORDER BY 子句結(jié)合使用围段。

SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;

16顾翼、如何顯示前 50 行?

在 MySQL 中适贸,使用以下代碼查詢顯示前 50 行:

SELECT*FROM

LIMIT 0,50;

17烙样、可以使用多少列創(chuàng)建索引?

任何標(biāo)準(zhǔn)表最多可以創(chuàng)建 16 個(gè)索引列批狱。

18、NOW()和 CURRENT_DATE()有什么區(qū)別卦停?

NOW()命令用于顯示當(dāng)前年份,月份小槐,日期,小時(shí)控嗜,分鐘和秒。

CURRENT_DATE()僅顯示當(dāng)前年份,月份和日期若专。

19膊爪、什么是非標(biāo)準(zhǔn)字符串類型萝喘?

1阁簸、TINYTEXT

2、TEXT

3饶米、MEDIUMTEXT

4、LONGTEXT

20匈棘、什么是通用 SQL 函數(shù)逃默?

1、CONCAT(A, B) – 連接兩個(gè)字符串值以創(chuàng)建單個(gè)字符串輸出。通常用于將兩個(gè)或多個(gè)字段合并為一個(gè)字段乌妙。

2、FORMAT(X, D)- 格式化數(shù)字 X 到 D 有效數(shù)字欲险。

3、CURRDATE(), CURRTIME()- 返回當(dāng)前日期或時(shí)間喜每。

4吨灭、NOW() – 將當(dāng)前日期和時(shí)間作為一個(gè)值返回。

5、MONTH(),DAY(),YEAR()遭赂,WEEK()循诉,WEEKDAY() – 從日期值中提取給定數(shù)據(jù)。

6撇他、HOUR()茄猫,MINUTE(),SECOND() – 從時(shí)間值中提取給定數(shù)據(jù)困肩。

7划纽、DATEDIFF(A,B) – 確定兩個(gè)日期之間的差異锌畸,通常用于計(jì)算年齡

8勇劣、SUBTIMES(A,B) – 確定兩次之間的差異。

9比默、FROMDAYS(INT) – 將整數(shù)天數(shù)轉(zhuǎn)換為日期值幻捏。

21、MySQL 支持事務(wù)嗎命咐?

在這里插入圖片描述

在缺省模式下篡九,MySQL 是 autocommit 模式的,所有的數(shù)據(jù)庫更新操作都會即時(shí)提交醋奠,所以在缺省情況下榛臼,MySQL 是不支持事務(wù)的。

但是如果你的 MySQL 表類型是使用 InnoDB Tables 或 BDB tables 的話钝域,你的MySQL 就可以使用事務(wù)處理,使用 SETAUTOCOMMIT=0 就可以使 MySQL 允許在非 autocommit 模式讽坏,在非autocommit 模式下锭魔,你必須使用 COMMIT 來提交你的更改例证,或者用 ROLLBACK來回滾你的更改。

22迷捧、MySQL 里記錄貨幣用什么字段類型好

在這里插入圖片描述

NUMERIC 和 DECIMAL 類型被 MySQL 實(shí)現(xiàn)為同樣的類型织咧,這在 SQL92 標(biāo)準(zhǔn)允許。

他們被用于保存值漠秋,該值的準(zhǔn)確精度是極其重要的值笙蒙,例如與金錢有關(guān)的數(shù)據(jù)。

當(dāng)聲明一個(gè)類是這些類型之一時(shí)庆锦,精度和規(guī)模的能被(并且通常是)指定捅位。

例如:

salary DECIMAL(9,2)

在這個(gè)例子中,9(precision)代表將被用于存儲值的總的小數(shù)位數(shù)搂抒,而 2(scale)代表將被用于存儲小數(shù)點(diǎn)后的位數(shù)艇搀。

因此,在這種情況下求晶,能被存儲在 salary 列中的值的范圍是從-9999999.99 到9999999.99焰雕。

23、MySQL 有關(guān)權(quán)限的表都有哪幾個(gè)芳杏?

MySQL 服務(wù)器通過權(quán)限表來控制用戶對數(shù)據(jù)庫的訪問矩屁,權(quán)限表存放在 MySQL 數(shù)據(jù)庫里,由 MySQL_install_db 腳本初始化爵赵。這些權(quán)限表分別 user吝秕,db,table_priv空幻,columns_priv 和 host郭膛。

24、列的字符串類型可以是什么氛悬?

字符串類型是:

1则剃、SET

2耘柱、BLOB

3、ENUM

4棍现、CHAR

5调煎、TEXT

25、MySQL 數(shù)據(jù)庫作發(fā)布系統(tǒng)的存儲己肮,一天五萬條以上的增量士袄,預(yù)計(jì)運(yùn)維三年,怎么優(yōu)化?

1谎僻、設(shè)計(jì)良好的數(shù)據(jù)庫結(jié)構(gòu)娄柳,允許部分?jǐn)?shù)據(jù)冗余,盡量避免 join 查詢艘绍,提高效率赤拒。

2、選擇合適的表字段數(shù)據(jù)類型和存儲引擎诱鞠,適當(dāng)?shù)奶砑铀饕?/p>

3挎挖、MySQL 庫主從讀寫分離。

4航夺、找規(guī)律分表蕉朵,減少單表中的數(shù)據(jù)量提高查詢速度。

5阳掐、添加緩存機(jī)制始衅,比如 memcached,apc 等缭保。

6汛闸、不經(jīng)常改動的頁面,生成靜態(tài)頁面涮俄。

7蛉拙、書寫高效率的 SQL。比如 SELECT * FROM TABEL 改為 SELECT field_1,

field_2, field_3 FROM TABLE.


篇幅所限彻亲,本文就先寫到這了孕锄,后面還有25道經(jīng)典面試題,多提一嘴苞尝,刷題切記不能死記硬背畸肆,很多問題都可以聯(lián)合起來理解,學(xué)會舉一反三宙址,才能讓你事半功倍轴脐,祝兄弟們早日找到自己滿意的工作。sky~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市大咱,隨后出現(xiàn)的幾起案子恬涧,更是在濱河造成了極大的恐慌,老刑警劉巖碴巾,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溯捆,死亡現(xiàn)場離奇詭異,居然都是意外死亡厦瓢,警方通過查閱死者的電腦和手機(jī)提揍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煮仇,“玉大人劳跃,你說我怎么就攤上這事≌愕妫” “怎么了刨仑?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绞呈。 經(jīng)常有香客問我贸人,道長间景,這世上最難降的妖魔是什么佃声? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮倘要,結(jié)果婚禮上圾亏,老公的妹妹穿的比我還像新娘。我一直安慰自己封拧,他們只是感情好志鹃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泽西,像睡著了一般曹铃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捧杉,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天陕见,我揣著相機(jī)與錄音,去河邊找鬼味抖。 笑死评甜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仔涩。 我是一名探鬼主播忍坷,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了佩研?” 一聲冷哼從身側(cè)響起柑肴,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旬薯,沒想到半個(gè)月后嘉抒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袍暴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年些侍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片政模。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岗宣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淋样,到底是詐尸還是另有隱情耗式,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布趁猴,位于F島的核電站刊咳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏儡司。R本人自食惡果不足惜娱挨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捕犬。 院中可真熱鬧跷坝,春花似錦、人聲如沸碉碉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垢粮。三九已至贴届,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜡吧,已是汗流浹背毫蚓。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留斩跌,地道東北人绍些。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像耀鸦,于是被迫代替她去往敵國和親柬批。 傳聞我的和親對象是個(gè)殘疾皇子啸澡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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