MySQL數據庫面試題


最近在換工作,雖然面試的不是dba,但是一些數據庫的知識還是會有問到,然后百度了一下,結合我搜到的和被問到的總結一下。

1、mysql支持事務嗎?

在缺省的模式下,是自動提交的,所有的數據庫更新操作都會即時提交,但是當將表類型使用innodb或bdb就可進行事務處理;

set  autocommit=0;

start transaction;

select @a:=count(id) from table1 where name='aa';

update table2 set num=@a where id='123'

2、mysql 與其他數據庫比較的特點

mysql 是一個小型的關系型數據庫管理系統,支持Linux,mac,windows等操作系統,與oracle,sqlserver,db2相比功能較弱

a、sql server 只能在Windows 上運行,開放性不夠,但真正的c/s,圖形化用戶界面,有豐富的編程接口,與windNt完全集成,處理速度快一些,可以跨平台使用,具體的一些命令有所不同 比如分頁 可以用 top

b、oracle 穩定性、安全機制,大數據方面,缺點價格昂貴,分頁用 rownum

c、mysql 支持5000萬條記錄的數據倉庫,適應所有平台,開源,缺省的桌面格式是MyISAM。MyISAM數據庫 與磁盤非常地兼容而不占用過多的CPU和內存。缺點:不支持熱備份系統正常運行時的備份),安全系統復雜而非標准;

3、varchar 和char 區別

char是一種固定長度類型,varchar是一種可變長度類型

4、數據庫事務種類:

隔離性、持續性、一致性、原子性

5、innodb中四種事務的隔離級別

read uncommited :讀取未提交,讀取未提交的數據(臟讀);實際應用少

read committed:讀取提交內容,大多數據庫默認的隔離級別

repeatable read,可重復讀(mysql 默認的事務隔離級別),多線程就顯示出來了,多個

實例在並發讀取數據的時候,會看到同樣的數據行,但另一個事務已經插入了新數據(幻讀),加上間隙鎖解決幻讀。

serializable:可串行化,強制事務排序(每個讀的數據上加上共享鎖,但是可能導致超時和鎖競爭)

6、mysql數據庫引擎MyISAM和InnoDB的區別

修改mysql存儲引擎alter table tablename type = innodb;

存儲結構:

MyISAM在磁盤上存儲成三個文件,.frm文件存儲表定義,.myd數據文件,.myi索引文件

innodb:保存在同一數據文件中,受限於操作系統的大小,一般為2GB

存儲空間:

MyISAM:可以被壓縮,存儲空間小,innodb需要更多的內存和存儲

事務:

MyISAM強調性能,執行速度較快,但不支持事務,innodb支持事務,外部鍵等高級數據庫功能

curd操作:

MyISAM查詢較快(因為沒有支持行級鎖)增刪慢(鎖定了整個表格)

innodb在delete 不重新建表,而是一行一行的刪除

外鍵:myisam:不支持外建,innodb支持

7、mysql 數據表修復及數據恢復

服務器突然斷電,強制關機之前沒有關閉mysql服務。

使用myisamchk來修復

1)將mysql服務停止

2)cmd-進入mysql的bin目錄下

3)執行myisamchk -recover 數據庫所在的路徑/*.myi

使用 repair table 或者optimize table

8、mysql記錄貨幣用什么字段

NUMERIC和DECIMAL類型被MySQL實現為同樣的類型,可以指定小數點的位數,當超過指定位數的時候會四舍五入

9、drop、delete、truncate區別

drop直接刪表,truncate  刪除數據,所占的空間(表和索引)也會刪除,入自動增加的id刪除之后從1開始,不可與where

delete 可以與where,但是不刪除所占空間

10、索引

優點:有效的使用可以增快查詢速度

缺點:增加數據庫存儲空間,在插入和修改是時候索引隨之變動,花費更長時間

普通索引:不確定是否是可重復的,可用普通索引,唯一所引,確定是不可重復的比如身份證號,組合索引,多個索引一起創建,注意最左原則

11、數據庫優化:

1)sql優化

a、模糊查詢,盡量避免左模糊

b、避免對索引字段進行計算操作;

避免在索引字段刪使用not,<>,!=;

避免在索引字段上使用is null ,is not null;

避免在索引字段上出現類型轉換

避免在索引字段上使用函數

c、盡量用union all 代替union

d、where 中避免使用 in ,not in,or 或 having

select car_no from  a where  EXISTS (select car_id from  c where c.car_id=a.car_id)

e、不要對表做無需要的操作

2)索引優化

3)數據庫優化

a、范式優化(消除冗余)

b、分表(垂直,水平)

c、服務器硬件優化

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM