mysql的常見面試問題

1、如何登陸mysql數據庫

MySQL -u username -p
2、如何開啓/關閉mysql服務

service mysql start/stop
3、查看mysql的狀態

service mysql status
4、如何顯示數所有數據庫

show databases
5、如何獲取表內所有字段對象的名稱和類型

describe table_name;
6、MYSQL支持事務嗎?

在缺省模式下,MYSQL是autocommit模式的,所有的數據庫更新操作都會即時提交,所以在缺省情況下,mysql是不支持事務的。 

但是如果你的MYSQL表類型是使用InnoDB Tables 或 BDB tables的話,你的MYSQL就可以使用事務處理,使用SET AUTOCOMMIT=0就可以使MYSQL允許在非autocommit模式,在非autocommit模式下,你必須使用COMMIT來提交你的更改,或者用ROLLBACK來回滾你的更改。 

示例如下: 

START TRANSACTION; 
SELECT @A:=SUM(salary) FROM table1 WHERE type=1; 
UPDATE table2 SET summmary=@A WHERE type=1; 
COMMIT;
7、MYSQL相比於其他數據庫有哪些特點?

MySQL是一個小型關係型數據庫管理系統,開發者爲瑞典MySQL AB公司,現在已經被Sun公司收購,支持FreeBSD、Linux、MAC、Windows等多種操作系統與其他的大型數據庫例如Oracle、DB2、SQL Server等相比功能稍弱一些 

1、可以處理擁有上千萬條記錄的大型數據 
2、支持常見的SQL語句規範 
3、可移植行高,安裝簡單小巧 
4、良好的運行效率,有豐富信息的網絡支持 
5、調試、管理,優化簡單(相對其他大型數據庫)
8、varchar和char的區別

Char是一種固定長度的類型,varchar是一種可變長度的類型
9、數據庫事物有哪幾種?

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

10、請簡潔地描述下MySQL中InnoDB支持的四種事務隔離級別名稱,以及逐級之間的區別?

SQL標準定義的四個隔離級別爲: 

read uncommited:讀取未提交內容 
read committed:讀取提交內容 
repeatable read:可重讀 
serializable:可串行化 

詳細解釋如下: 

Read Uncommitted(讀取未提交內容) 

在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因爲它的性能也不比其他級別好多少。讀取未提交的數據,也被稱之爲髒讀(Dirty Read)。 

Read Committed(讀取提交內容) 

這是大多數數據庫系統的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。這種隔離級別也支持所謂的不可重複讀(Nonrepeatable Read),因爲同一事務的其他實例在該實例處理其間可能會有新的commit,所以同一select可能返回不同結果。 

Repeatable Read(可重讀) 

這是MySQL的默認事務隔離級別,它確保同一事務的多個實例在併發讀取數據時,會看到同樣的數據行。不過理論上,這會導致另一個棘手的問題:幻讀(Phantom Read)。簡單的說,幻讀指當用戶讀取某一範圍的數據行時,另一個事務又在該範圍內插入了新行,當用戶再讀取該範圍的數據行時,會發現有新的“幻影” 行。InnoDB和Falcon存儲引擎通過多版本併發控制(MVCC,Multiversion Concurrency Control 間隙鎖)機制解決了該問題。注:其實多版本只是解決不可重複讀問題,而加上間隙鎖(也就是它這裏所謂的併發控制)才解決了幻讀問題。 

Serializable(可串行化) 

這是最高的隔離級別,它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀的數據行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。 

對於不同的事務,採用不同的隔離級別分別有不同的結果。不同的隔離級別有不同的現象。主要有下面3種現在: 

1、髒讀(dirty read):一個事務可以讀取另一個尚未提交事務的修改數據。 

2、非重複讀(nonrepeatable read):在同一個事務中,同一個查詢在T1時間讀取某一行,在T2時間重新讀取這一行時候,這一行的數據已經發生修改,可能被更新了(update),也可能被刪除了(delete)。 

3、幻像讀(phantom read):在同一事務中,同一查詢多次進行時候,由於其他插入操作(insert)的事務提交,導致每次返回不同的結果集。 

不同的隔離級別有不同的現象,並有不同的鎖定/併發機制,隔離級別越高,數據庫的併發性就越差,4種事務隔離級別分別表現的現象如下表:
12、mysql有關權限的表都有哪幾個

MySQL服務器通過權限表來控制用戶對數據庫的訪問,權限表存放在mysql數據庫裏,由mysql_install_db腳本初始化。這些權限表分別user,db,table_priv,columns_priv和host。下面分別介紹一下這些表的結構和內容: 

user權限表:記錄允許連接到服務器的用戶帳號信息,裏面的權限是全局級的。 
db權限表:記錄各個帳號在各個數據庫上的操作權限。 
table_priv權限表:記錄數據表級的操作權限。 
columns_priv權限表:記錄數據列級的操作權限。 
host權限表:配合db權限表對給定主機上數據庫級操作權限作更細緻的控制。這個權限表不受GRANT和REVOKE語句的影響。
13、mysql存儲引擎有哪些?如何修改mysql存儲引擎?

MyISAM indexed sequential access method (有索引的順序訪問方法) 

MyISAM 具有檢查和修復表格的大多數工具。表格可以被壓縮,而且支持全文收索 

不是事務安全的,而且不支持外鍵。 

MEMORY 也是以前的(HEAP) 該類型表存儲在內存中,表的索引是哈希分佈的。 

merge 這些表爲了查詢目的,把myisam 表集合作爲單個表,因此你可以在某些操作系統中避開最大文件大小的限制。 

archive 這種類型的表只支持,insert ,select 不支持delete,update,replace ,不使用索引。 

csv 這些表保存在服務器的單個文件中,它包含了用逗號間隔的數據。

innodb 這種表是事務安全的。提供了commit(提交) rollback(實務回滾)支持外鍵,比myisam慢。 

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

14、MYSQL 數據表修復及數據恢復面試題

1、MYSQL數據表在什麼情況下容易損壞? 
服務器突然斷電導致數據文件損壞。 
強制關機,沒有先關閉mysql 服務等。
2、數據表損壞後的主要現象是什麼? 
從表中選擇數據之時,得到如下錯誤:Incorrect key file for table: ‘…’. Try to repair it 
查詢不能在表中找到行或返回不完全的數據。 
Error: Table ‘p’ is marked as crashed and should be repaired 。 
打開表失敗: Can’t open file: ‘×××.MYI’ (errno: 145) 。
3、數據表損壞的修復方式有哪些? 
使用 myisamchk 來修復,具體步驟: 
1)修復前將mysql服務停止。 
2)打開命令行方式,然後進入到mysql的/bin目錄。 
3)執行myisamchk –recover 數據庫所在路徑/*.MYI 
使用repair table 或者 OPTIMIZE table命令來修復,REPAIR TABLE table_name 修復表 OPTIMIZE TABLE table_name 優化表 REPAIR TABLE 用於修復被破壞的表。 
OPTIMIZE TABLE 用於回收閒置的數據庫空間,當表上的數據行被刪除時,所佔據的磁盤空間並沒有立即被回收,使用了OPTIMIZE TABLE命令後這些空間將被回收,並且對磁盤上的數據行進行重排(注意:是磁盤上,而非數據庫)
15、MYSQL數據庫服務器性能分析的方法命令有哪些?

Show status 
一些值得監控的變量值: 
Bytes_received和Bytes_sent 
和服務器之間來往的流量。 
Com_*服務器正在執行的命令。 
Created_*在查詢執行期限間創建的臨時表和文件。 
Handler_*存儲引擎操作。 
Select_*不同類型的聯接執行計劃。 
Sort_*幾種排序信息。 
Show session status like ‘Select’; 
Show profiles 
SET profiling=1; 
Show profiles\G 
Show profile;
16、 mysql裏記錄貨幣用什麼字段類型好

NUMERIC和DECIMAL類型被MySQL實現爲同樣的類型,這在SQL92標準允許。他們被用於保存值,該值的準確精度是極其重要的值,例如與金錢有關的數據。當聲明一個類是這些類型之一時,精度和規模的能被(並且通常是)指定;
例如: 
salary DECIMAL(9,2) 
在這個例子中,9(precision)代表將被用於存儲值的總的小數位數,而2(scale)代表將被用於存儲小數點後的位數。因此,在這種情況下,能被存儲在salary列中的值的範圍是從-9999999.99到9999999.99。在ANSI/ISO SQL92中,句法DECIMAL(p)等價於DECIMAL(p,0)。同樣,句法DECIMAL等價於DECIMAL(p,0),這裏實現被允許決定值p。MySQL當前不支持DECIMAL/NUMERIC數據類型的這些變種形式的任一種。這一般說來不是一個嚴重的問題,因爲這些類型的主要益處得自於明顯地控制精度和規模的能力。 

DECIMAL和NUMERIC值作爲字符串存儲,而不是作爲二進制浮點數,以便保存那些值的小數精度。一個字符用於值的每一位、小數點(如果scale>0)和“-”符號(對於負值)。如果scale是0,DECIMAL和NUMERIC值不包含小數點或小數部分。 

DECIMAL和NUMERIC值得最大的範圍與DOUBLE一樣,但是對於一個給定的DECIMAL或NUMERIC列,實際的範圍可由制由給定列的precision或scale限制。當這樣的列賦給了小數點後面的位超過指定scale所允許的位的值,該值根據scale四捨五入。當一個DECIMAL或NUMERIC列被賦給了其大小超過指定(或缺省的)precision和scale隱含的範圍的值,MySQL存儲表示那個範圍的相應的端點值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章