mysql基礎面試題

目錄:

1.什么是索引:

2.索引優(yōu)缺點:

3.索引分類:

4.為什么使用索引:

5.索引結構:

6.聚簇索引和非聚簇索引:

7.索引的創(chuàng)建:

8.什么時候創(chuàng)建索引:

9.什么時候不用創(chuàng)建索引:

10.索引失效:

11.存儲過程:

12.函數(shù):

13.流程控制語句:

14.主鍵和唯一的區(qū)別:

15.事務的創(chuàng)建:

16.視圖:

17.mylsam和innodb的區(qū)別:

18.sql執(zhí)行順序:

19.join相關知識:

20.sql優(yōu)化:

21.讀鎖和寫鎖:

22.常見函數(shù):

23.常見數(shù)據(jù)類型:

24.ddl

25.dml

26.mvcc:

1.什么是索引:

索引是能快速查找數(shù)據(jù)的一種數(shù)據(jù)結構。索引通常以文件的形式存在,儲存在磁盤中。

2.索引優(yōu)缺點:

優(yōu)點:單值和范圍查詢效率高,降低了io成本和排序成本。

缺點:操作數(shù)據(jù)同時也要修改索引,索引操作數(shù)據(jù)變慢了,索引占用空間。

3.索引分類:

普通索引:僅加速查詢

唯一索引:加速查詢 + 列值唯一(可以有null)

主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中只有一個

聯(lián)合索引:多列值組成一個索引,專門用于組合搜索,其效率大于索引合并

4.為什么使用索引:

因為mysql查詢數(shù)據(jù)時是一行一行進行查詢數(shù)據(jù)的,每一次查詢都會進行一次io操作,io操作消耗資源,所以通常使用索引來優(yōu)化。

5.索引結構:

B+tree:通過默認使用b+tree這種數(shù)據(jù)結構。

hash:hash這種結構單值查詢非??欤M行范圍查詢則失效了。memory引擎默認是hash結構。

6.聚簇索引和非聚簇索引:

聚簇索引:索引和數(shù)據(jù)是再一起的,通過找到了索引就找到了數(shù)據(jù),常見于innodb引擎。

非聚簇索引:索引和數(shù)據(jù)是分開的,常見于mylsam引擎。

7.索引的創(chuàng)建:

1.create index 索引名 on 表名(列名)

2.創(chuàng)建表時也可以同時創(chuàng)建索引。

8.什么時候創(chuàng)建索引:

主鍵默認創(chuàng)建索引,頻繁查詢的字段,排序的字段。

9.什么時候不用創(chuàng)建索引:

字段中數(shù)據(jù)大量重復,例如state:0\1。數(shù)據(jù)量小,不是經(jīng)常查詢的字段。

10.索引失效:

1.使用了or.

2.聯(lián)合索引時順序不對。

3.使用模糊查詢時剛開始不能使用%

4.使用了函數(shù)

11.存儲過程:

存儲過程可以看作一組sql語句的集合。

優(yōu)點:減少了sql的執(zhí)行次數(shù),提高了效率,例如正常需要查詢3次的sql語句,使用存儲過程,則只需要查詢一次了。

創(chuàng)建語法:

????create procedure 存儲過程名 (參數(shù)列表: in out inout)

????begin?

????存儲過程體

????end

調(diào)用語法:

? ? call 存儲過程名(參數(shù))

12.函數(shù):

函數(shù)跟存儲過程類似,但存儲過程可以返回0-多個值。而函數(shù)只能有一個返回值。

創(chuàng)建語法:

????create function 函數(shù)名

????begin?

????存儲過程體

????end

13.流程控制語句:

順序結構:從上到下依次進行。

分支結構:有多條路徑執(zhí)行。

? ? if函數(shù)、case

循環(huán)結構:循環(huán)執(zhí)行。

? ? while、loop、repeat

14.主鍵和唯一的區(qū)別:

相同點:都不能重復。

不同點:主鍵不能為空,唯一可以為空。

15.事務的創(chuàng)建:

隱式事務:默認開啟的事務,insert、update、delete

顯示事務:有明顯的開啟標志。

? ? ? ? 語法:開啟事務:set autocommint =0?

? ? ? ? ? ? ? ? ? ?執(zhí)行sql

? ? ? ? ? ? ? ? ? ? 結束事務:commit

16.視圖:

視圖可以看作一張?zhí)摂M的表,可以和普通的表一樣使用,封裝了一條sql語句。

17.mylsam和innodb的區(qū)別:

innodb:支持外鍵,行鎖,支持事務,表空間大。

mylsam:不支持外鍵,表鎖,不支持事務,表空間小。

18.sql執(zhí)行順序:

from --- on --- where --- group by ---- having ---- select --- order by --- limit

19.join相關知識:

inner join:內(nèi)連接,查詢兩張表相同部分。

left join: 左連接,左表全查,關聯(lián)右表相同的部分。

right join: 右連接,右表全查,關聯(lián)上左表相同部分。

full outer join: 全連接,查詢左右表所有數(shù)據(jù)。

20.sql優(yōu)化:

建立索引,盡量減少子查詢層數(shù),select 只列出需要查詢的字段。

21.讀鎖和寫鎖:

讀鎖:多個讀操作之間可以同時進行,互不影響。

寫鎖:讀操作不影響,但當寫入時,會阻礙其他的讀寫操作。

22.常見函數(shù):

1.字符函數(shù):?

? ? concat:字符拼接。

? ? length:獲取字符長度。

? ? substring:截取字符。

2.數(shù)學函數(shù):

? ? abs:絕對值。

? ? round:四舍五入

? ? mod:取余

3.日期函數(shù):

? ? now:當前時間

? ? date_formate:時間轉字符

? ? str_to_date:字符轉時間

4.流程函數(shù):

? ? if函數(shù)、case函數(shù)

5.聚合函數(shù)\分組函數(shù)

? ? avg:平均數(shù)

? ? sum:求和

? ? count:條數(shù)

? ? min:最小

? ? max:最大

23.常見數(shù)據(jù)類型:

int、double、float、decimal、char、varchar、text

date:年月日、time:時分秒、datetime:年月日時分秒、timestamp:時間戳

24.ddl

庫:

? ? 創(chuàng)建庫:creat database 庫名

? ? 刪除庫:drop database 庫名

表:

? ? 創(chuàng)建表:create table 表名 (字段名 類型, 字段名 類型)

? ? 修改表: alert table 表名?(字段名 類型, 字段名 類型)

? ? 刪除表: drop table 表名

25.dml

插入:

? ? insert into 表名 字段名 values 值

修改:

? ? update 表名 set 鍵=值 where?

刪除:

? ? delete from 表名 where?

26.mvcc:

mvcc主要為了提高并發(fā)的讀寫,不用加鎖就能讓多個事務并發(fā)讀寫。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容