MySQL(一)——MySQL基礎(chǔ)和部分面試題

MySQL基礎(chǔ):

  1. 數(shù)據(jù)庫的創(chuàng)建與刪除
CREATE DATABASE <數(shù)據(jù)庫名>;//創(chuàng)建數(shù)據(jù)庫
DROP DATABASE <數(shù)據(jù)庫名>;//刪除數(shù)據(jù)庫
  1. 數(shù)據(jù)庫表的創(chuàng)建與刪除
CREATE TABLE <數(shù)據(jù)表名>(column_name column_type);//創(chuàng)建表
DROP TABLE <數(shù)據(jù)表名>;//刪除表
  1. 增刪改查
  • 查詢語句
SELECT [DISTINCT|ALL]<目標(biāo)列組>
FROM <基本表名>
[WHERE <行條件表達(dá)式>]
[GROUP BY <分組列名> [HAVING<組條件表達(dá)式>]]
[ORDER BY <排序列名> [ASC|DESC]]
//例:查詢學(xué)生成績表SC里平均成績低于80分的學(xué)生學(xué)號(hào)Snum和平均成績,并按平均成績降序排列
SELECT Snum AS 學(xué)號(hào),AVG(Score) AS 平均成績
FROM SC
GROUP BY Snum
HAVING AVG(Score)<80 DESC;
  • 插入數(shù)據(jù)
INSERT INTO <表名>[(A1,A2,A3...)]
VALUES (v1,v2,v3...);
//例 :向表學(xué)生S中添加一位學(xué)生的數(shù)據(jù)
INSERT INTO S(Snum,Sname,Ssex,Sage,Sphone)
VALUES("0001","張三",18,"男","88888888");
  • 更新數(shù)據(jù)
UPDATE <表名>
SET <列名>=<表達(dá)式>
[WHERE <條件>]
//例:將張三的年齡改為20
UPDATE S
SET Sage=20
WHERE Sname="張三";
  • 刪除數(shù)據(jù)
DELETE FROM <表名>
[WHERE <條件>]
//例:刪除學(xué)生張三的信息
DELETE FROM S
WHERE Sname="張三";

MySQL基礎(chǔ)面試題

  1. 說一下MySQL執(zhí)行一條查詢語句的內(nèi)部執(zhí)行過程?
    答:
    1)客戶端先通過連接器連接到MySQL服務(wù)器
    2)連接器權(quán)限驗(yàn)證通過后囤热,先查詢是否有查詢緩存瞳步,如果有緩存(之前執(zhí)行過此語句)則直接返回緩存數(shù)據(jù)袄秩,如果沒有則進(jìn)入分析器
    3)分析器對(duì)查詢語句進(jìn)行語法分析和詞法分析现柠,判斷SQL語法是否正確苹享,如果查詢語法錯(cuò)誤會(huì)直接返回客戶端錯(cuò)誤信息双絮,如果語法正確則進(jìn)入優(yōu)化器
    4)優(yōu)化器對(duì)查詢語句進(jìn)行優(yōu)化處理,例如一個(gè)表里有多個(gè)索引得问,優(yōu)化器會(huì)判別哪個(gè)索引性能更好
    5)優(yōu)化器執(zhí)行完進(jìn)入執(zhí)行器囤攀,執(zhí)行器對(duì)語句進(jìn)行查詢對(duì)比,查到滿足條件的所有數(shù)據(jù)然后返回

  2. MySQL查詢緩存功能有何優(yōu)缺點(diǎn)宫纬?
    答:
    MySQL查詢緩存功能是在連接器之后發(fā)生的焚挠,它的優(yōu)點(diǎn)是效率高,如果已經(jīng)有緩存則直接返回結(jié)果漓骚。缺點(diǎn)是失效太頻繁導(dǎo)致緩存的命中率較低蝌衔,任何更新表操作都會(huì)清空查詢緩存,一次查詢緩存非常容易失效

  3. 如何關(guān)閉MySQL的查詢緩存功能蝌蹂?
    答:
    MySQL查詢緩存功能是默認(rèn)開啟的噩斟,配置querycachetyoe參數(shù)為DEMAND(按需使用)關(guān)閉查詢緩存,MySQL8.0之后沒有查詢緩存功能

  4. MySQL可以針對(duì)表級(jí)別設(shè)置數(shù)據(jù)庫引擎嗎孤个?怎么設(shè)置剃允?
    答:
    可以針對(duì)不同的表設(shè)置不同的引擎。在CREATE TABLE語句中使用ENGINE=引擎名(比如Memory)來設(shè)置表的存儲(chǔ)引擎:

CREATE TABLE student(
     id int PRIMARY KEY auto_increment,
     username varchar(120),
     age int
)ENGINE=Memory
  1. 常用的存儲(chǔ)引擎InnoDB和MyISAM有什么區(qū)別齐鲤?
    答:
    最大的區(qū)別是InnoDB支持事務(wù)斥废,而MyISAM不支持事務(wù)。主要區(qū)別如下:
    1)InnoDB支持崩潰后安全恢復(fù)给郊,MyISAM不支持崩潰后安全恢復(fù)
    2)InnoDB支持行級(jí)鎖牡肉,MyISAM不支持行級(jí)鎖,只支持到表鎖
    3)InnoDB支持外鍵丑罪,MyISAM不支持外鍵
    4)MyISAM性能比InnoDB高
    5)MyISAM支持FULLTEXT類型的全文索引荚板,InnoDB不支持FULLTEXT類型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引吩屹,并且效果更好
    6)InnoDB主鍵查詢性能高于MyISAM

  2. 什么是事務(wù)跪另?特性?
    答:
    事務(wù)是一系列的數(shù)據(jù)庫操作煤搜,是數(shù)據(jù)庫的基本單位
    事務(wù)的四個(gè)特性:
    1)原子性免绿。要么全部執(zhí)行,要么全部不執(zhí)行
    2)一致性擦盾。事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)化為另一種正確狀態(tài)
    3)隔離型嘲驾。事務(wù)正確提交之前淌哟,不允許把該事務(wù)對(duì)數(shù)據(jù)的改變提供給其他事務(wù)
    4)持久性。事務(wù)提交后辽故,結(jié)果永遠(yuǎn)保存于數(shù)據(jù)庫中

  3. 一張自增表中有三條數(shù)據(jù)徒仓,刪除了兩條數(shù)據(jù)之后重啟數(shù)據(jù)庫,再新增一條數(shù)據(jù)誊垢,此時(shí)數(shù)據(jù)的ID是幾掉弛?
    答:
    如果這張表的引擎是MyISAM,那么ID=4喂走;如果是InnoDB殃饿,那么ID=2

  4. MySQL中什么情況會(huì)導(dǎo)致自增主鍵不能連續(xù)?
    答:
    1)唯一主鍵沖突會(huì)導(dǎo)致自增主鍵不連續(xù)
    2)事務(wù)回滾也會(huì)導(dǎo)致自增主鍵不連續(xù)

  5. 什么事獨(dú)立表空間和共享表空間芋肠?它們的區(qū)別是乎芳?
    答:
    獨(dú)立表空間:指的是數(shù)據(jù)庫中所有的數(shù)據(jù),索引文件全部放在一個(gè)文件中帖池,默認(rèn)這個(gè)共享表空間的文件路徑在data目錄下
    獨(dú)立表空間:每一個(gè)表都會(huì)生成以獨(dú)立的文件方式來存儲(chǔ)
    共享表空間和獨(dú)立表空間的最大區(qū)別是如果把表放在共享表空間奈惑,即使表刪除了空間也不會(huì)刪除,所以表依然很大碘裕,而獨(dú)立表空間如果刪除表就會(huì)清楚空間

  6. 如何設(shè)置獨(dú)立表空間携取?
    答:
    獨(dú)立表空間是由參數(shù)innodb fileper_table控制的,把它設(shè)置成ON就是獨(dú)立表空間了帮孔。在MySQL5.6.6版本之后雷滋,這個(gè)值默認(rèn)為ON

  7. 如何進(jìn)行表空間收縮?
    答:
    使用重建表的方式可以收縮表空間:
    1)alter table t engine=InnoDB
    2)optmize table t
    3)truncate table t

  8. 重建表的執(zhí)行流程文兢?
    答:
    1)建立一個(gè)臨時(shí)文件晤斩,掃描表t主鍵的所有數(shù)據(jù)頁
    2)用數(shù)據(jù)頁中表t的記錄生成B+樹,存儲(chǔ)到臨時(shí)文件中
    3)生成臨時(shí)文件的過程中姆坚,將所有對(duì)t的操作記錄在一個(gè)日志文件(row log)中
    4)臨時(shí)文件生成后澳泵,將日志文件中的操作應(yīng)用到臨時(shí)文件,得到一個(gè)邏輯數(shù)據(jù)上與表t相同的數(shù)據(jù)文件
    5)用臨時(shí)文件替換表t的數(shù)據(jù)文件

  9. 表的結(jié)構(gòu)信息存在哪里兼呵?
    答:
    MySQL8之前兔辅,表結(jié)構(gòu)的定義信息存在以.frm為后綴的文件里;MySQL8之后击喂,允許把表結(jié)構(gòu)的定義信息存在系統(tǒng)數(shù)據(jù)表中

  10. 什么是覆蓋索引维苔?
    答:
    覆蓋索引是指,索引上的信息足夠滿足查詢請(qǐng)求懂昂,不需要再回到主鍵上去取數(shù)據(jù)

  11. 如果把一個(gè)InnoDB表的主鍵刪掉介时,是不是就沒有主鍵,就沒辦法進(jìn)行回表查詢了?
    答:
    可以回表查詢沸柔,如果把主鍵刪掉了循衰,那么InnoDB會(huì)自己生成一個(gè)長度為6字節(jié)的rowid作為主鍵

  12. 內(nèi)存表和臨時(shí)表有什么區(qū)別?
    答:
    內(nèi)存表褐澎,指的是使用Memory引擎的表会钝,。這種表的數(shù)據(jù)都保存在內(nèi)存里工三,系統(tǒng)重啟的時(shí)候會(huì)被清空顽素,但是表結(jié)構(gòu)還在
    臨時(shí)表,可以使用各種引擎類型徒蟆。如果是使用InnoDB引擎或者M(jìn)yISAM引擎的臨時(shí)表,寫數(shù)據(jù)的時(shí)候是寫到磁盤上的

  13. 并發(fā)事務(wù)會(huì)帶來哪些問題型型?
    答:
    修改丟失段审、臟讀、不可重復(fù)讀闹蒜、幻讀

  14. VARCHAR和CHAR的區(qū)別是什么寺枉?
    答:
    VARCHAR和CHAR最大的區(qū)別是,VARCHAR的長度是可變的绷落,CHAR是固定長度姥闪。所以CHAR適合存儲(chǔ)長度較短的字段和固定長度的字段比如身份證號(hào)、手機(jī)號(hào)等砌烁。反之則適合用VARCHAR

  15. MySQL 存儲(chǔ)金額應(yīng)該使用哪種數(shù)據(jù)類型筐喳?
    答:
    應(yīng)該使用decimal,因?yàn)槿绻鎯?chǔ)其他數(shù)據(jù)類型比如float函喉,有導(dǎo)致小數(shù)點(diǎn)后數(shù)據(jù)丟失
    的風(fēng)險(xiǎn)

  16. 刪除表的數(shù)據(jù)有幾張方式避归?區(qū)別是?
    答:
    有兩種方式:delete和truncate管呵,區(qū)別如下:
    1)delete可以添加where條件刪除部分?jǐn)?shù)據(jù)梳毙,truncate不能添加where條件,只能刪除整張表
    2)delete的刪除信息會(huì)在MySQL的日志中記錄捐下,而truncate的刪除信息不回被記錄账锹。因此delete的信息可以被找回,而truncate的信息無法被找回
    3)truncate因?yàn)椴挥涗浫罩舅詧?zhí)行效率比delete快

delete from t where id=1;
truncate table t;
  1. MySQL支持幾種模糊查詢坷襟?它們的區(qū)別是奸柬?
    答:
    支持兩種模糊查詢:regexp和like
    like是對(duì)任意多字符匹配或任意單字符進(jìn)行模糊匹配,而regexp則支持正則表達(dá)式的匹配方式

  2. count(column)和count()有什么區(qū)別啤握?
    答:
    最大的區(qū)別是統(tǒng)計(jì)結(jié)果可能不一致鸟缕,count(column)統(tǒng)計(jì)不會(huì)統(tǒng)計(jì)列值為null的數(shù)據(jù),而count(*)則會(huì)統(tǒng)計(jì)所有信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市懂从,隨后出現(xiàn)的幾起案子授段,更是在濱河造成了極大的恐慌,老刑警劉巖番甩,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侵贵,死亡現(xiàn)場離奇詭異,居然都是意外死亡缘薛,警方通過查閱死者的電腦和手機(jī)窍育,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宴胧,“玉大人漱抓,你說我怎么就攤上這事∷∑耄” “怎么了乞娄?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長显歧。 經(jīng)常有香客問我仪或,道長,這世上最難降的妖魔是什么士骤? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任范删,我火速辦了婚禮,結(jié)果婚禮上拷肌,老公的妹妹穿的比我還像新娘到旦。我一直安慰自己,他們只是感情好廓块,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布厢绝。 她就那樣靜靜地躺著,像睡著了一般带猴。 火紅的嫁衣襯著肌膚如雪昔汉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天拴清,我揣著相機(jī)與錄音靶病,去河邊找鬼。 笑死口予,一個(gè)胖子當(dāng)著我的面吹牛娄周,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沪停,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼煤辨,長吁一口氣:“原來是場噩夢啊……” “哼裳涛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起众辨,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤端三,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后鹃彻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郊闯,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年蛛株,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了团赁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谨履,死狀恐怖欢摄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笋粟,我是刑警寧澤剧浸,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站矗钟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嫌变。R本人自食惡果不足惜吨艇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腾啥。 院中可真熱鬧东涡,春花似錦、人聲如沸倘待。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凸舵。三九已至祖娘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間啊奄,已是汗流浹背渐苏。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菇夸,地道東北人琼富。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像庄新,于是被迫代替她去往敵國和親鞠眉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子薯鼠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359