MySQL數據庫面試題

最近在換工做,雖然面試的不是dba,可是一些數據庫的知識仍是會有問到,而後百度了一下,結合我搜到的和被問到的總結一下。mysql

一、mysql支持事務嗎?面試

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

set  autocommit=0;數據庫

start transaction;編程

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

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

二、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和內存。缺點:不支持熱備份系統正常運行時的備份),安全系統複雜而非標準;

三、varchar 和char 區別

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

四、數據庫事務種類:

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

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

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

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

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

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

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

六、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支持

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

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

使用myisamchk來修復

1)將mysql服務中止

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

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

使用 repair table 或者optimize table

八、mysql記錄貨幣用什麼字段

NUMERIC和DECIMAL類型被MySQL實現爲一樣的類型,能夠指定小數點的位數,當超過指定位數的時候會四捨五入

九、drop、delete、truncate區別

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

delete 能夠與where,可是不刪除所佔空間

十、索引

優勢:有效的使用能夠增快查詢速度

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

普通索引:不肯定是不是可重複的,可用普通索引,惟一所引,肯定是不可重複的好比身份證號,組合索引,多個索引一塊兒建立,注意最左原則

十一、數據庫優化:

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、服務器硬件優化

相關文章
相關標籤/搜索