去 BAT 面試,總結了這 55 道 MySQL 面試題!

一、一張表,裏面有ID自增主鍵,當insert了17條記錄以後,刪除了第15,16,17條記錄,再把Mysql重啓,再insert一條記錄,這條記錄的ID是18仍是15

(1)若是表的類型是MyISAM,那麼是18.
由於MyISAM表會吧自增主鍵的最大ID記錄到數據文件裏,重啓MysQL自增主鍵的最大ID也不會丟失。
(2)若是表的類型是InnoDB,那麼是15.
InnoDB表只是把自增主鍵的最大ID記錄到內存中,因此重啓數據庫或者是對錶進行OPTIMIZE操做,都會致使最大ID丟失。mysql

二、Mysql的技術特色是什麼?

Mysql數據庫軟件是一個客戶端或服務器系統,其中包括:支持各類客戶端程序和庫的多線程SQL服務器、不一樣的後端、普遍的應用程序編程接口和管理工具。面試

三、Heap表是什麼?

HEAP表存在於內存中,用於臨時高速存儲。sql

BLOB或TEXT字段是不容許的
只能使用比較運算符=,<,>,=>,= <
HEAP表不支持AUTO_INCREMENT
索引不可爲NULLshell

四、Mysql服務器默認端口是什麼?

Mysql服務器的默認端口是3306。數據庫

五、與Oracle相比,Mysql有什麼優點?

Mysql是開源軟件,隨時可用,無需付費。
Mysql是便攜式的
帶有命令提示符的GUI。
使用Mysql查詢瀏覽器支持管理編程

六、如何區分FLOAT和DOUBLE?

如下是FLOAT和DOUBLE的區別:後端

浮點數以8位精度存儲在FLOAT中,而且有四個字節。
浮點數存儲在DOUBLE中,精度爲18位,有八個字節。數組

七、區分CHAR_LENGTH和LENGTH?

CHAR_LENGTH是字符數,而LENGTH是字節數。Latin字符的這兩個數據是相同的,可是對於Unicode和其餘編碼,它們是不一樣的。瀏覽器

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

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

read uncommited :讀到未提交數據
read committed:髒讀,不可重複讀
repeatable read:可重讀
serializable :串行事物

九、在Mysql中ENUM的用法是什麼?

ENUM是一個字符串對象,用於指定一組預約義的值,並可在建立表時使用。

Create table size(name ENUM('Smail,'Medium','Large');

十、如何定義REGEXP?

REGEXP是模式匹配,其中匹配模式在搜索值的任何位置。

十一、CHAR和VARCHAR的區別?

如下是CHAR和VARCHAR的區別:

CHAR和VARCHAR類型在存儲和檢索方面有所不一樣
CHAR列長度固定爲建立表時聲明的長度,長度值範圍是1到255
當CHAR值被存儲時,它們被用空格填充到特定長度,檢索CHAR值時需刪除尾隨空格。

十二、列的字符串類型能夠是什麼?

字符串類型是:

SET
BLOB
ENUM
CHAR
TEXT
VARCHAR

1三、如何獲取當前的Mysql版本?

SELECT VERSION();用於獲取當前Mysql的版本。

1四、Mysql中使用什麼存儲引擎?

存儲引擎稱爲表類型,數據使用各類技術存儲在文件中。

技術涉及:

Storage mechanism
Locking levels
Indexing
Capabilities and functions.

1五、Mysql驅動程序是什麼?

如下是Mysql中可用的驅動程序:

PHP驅動程序
JDBC驅動程序
ODBC驅動程序
CWRAPPER
PYTHON驅動程序
PERL驅動程序
RUBY驅動程序
CAP11PHP驅動程序
Ado.net5.mxj

1六、TIMESTAMP在UPDATE CURRENT_TIMESTAMP數據類型上作什麼?

建立表時TIMESTAMP列用Zero更新。只要表中的其餘字段發生更改,UPDATE CURRENT_TIMESTAMP修飾符就將時間戳字段更新爲當前時間。

1七、主鍵和候選鍵有什麼區別?

表格的每一行都由主鍵惟一標識,一個表只有一個主鍵。

主鍵也是候選鍵。按照慣例,候選鍵能夠被指定爲主鍵,而且能夠用於任何外鍵引用。

1八、如何使用Unix shell登陸Mysql?

咱們能夠經過如下命令登陸:

#[mysql dir]/bin/mysql -h hostname -u <UserName> -p <password>

1九、 myisamchk是用來作什麼的?

它用來壓縮MyISAM表,這減小了磁盤或內存使用。

2一、如何控制HEAP表的最大尺寸?

Heal表的大小可經過稱爲max_heap_table_size的Mysql配置變量來控制。

2二、MyISAM Static和MyISAM Dynamic有什麼區別?

在MyISAM Static上的全部字段有固定寬度。動態MyISAM表將具備像TEXT,BLOB等字段,以適應不一樣長度的數據類型。點擊這裏有一套最全阿里面試題總結。

MyISAM Static在受損狀況下更容易恢復。

2三、federated表是什麼?

federated表,容許訪問位於其餘服務器數據庫上的表。

2四、若是一個表有一列定義爲TIMESTAMP,將發生什麼?

每當行被更改時,時間戳字段將獲取當前時間戳。

2五、列設置爲AUTO INCREMENT時,若是在表中達到最大值,會發生什麼狀況?

它會中止遞增,任何進一步的插入都將產生錯誤,由於密鑰已被使用。

2六、怎樣才能找出最後一次插入時分配了哪一個自動增量?

LAST_INSERT_ID將返回由Auto_increment分配的最後一個值,而且不須要指定表名稱。

2七、你怎麼看到爲表格定義的全部索引?

索引是經過如下方式爲表格定義的:

SHOW INDEX FROM <tablename>;
28.、LIKE聲明中的%和_是什麼意思?

%對應於0個或更多字符,_只是LIKE語句中的一個字符。

2九、如何在Unix和Mysql時間戳之間進行轉換?

UNIX_TIMESTAMP是從Mysql時間戳轉換爲Unix時間戳的命令
FROM_UNIXTIME是從Unix時間戳轉換爲Mysql時間戳的命令
30、列對比運算符是什麼?

在SELECT語句的列比較中使用=,<>,<=,<,> =,>,<<,>>,<=>,AND,OR或LIKE運算符。

3一、咱們如何獲得受查詢影響的行數?

行數能夠經過如下代碼得到:

SELECT COUNT(user_id)FROM users;
3二、Mysql查詢是否區分大小寫?

不區分

SELECT VERSION(), CURRENT_DATE;

SeLect version(), current_date;

seleCt vErSiOn(), current_DATE;

全部這些例子都是同樣的,Mysql不區分大小寫。

33.、LIKE和REGEXP操做有什麼區別?

LIKE和REGEXP運算符用於表示^和%。

SELECT * FROM employee WHERE emp_name REGEXP "^b";SELECT * FROM employee WHERE emp_name LIKE "%b";
34.、BLOB和TEXT有什麼區別?

BLOB是一個二進制對象,能夠容納可變數量的數據。有四種類型的BLOB -

TINYBLOB
BLOB
MEDIUMBLOB和
LONGBLOB

它們只能在所能容納價值的最大長度上有所不一樣。

TEXT是一個不區分大小寫的BLOB。四種TEXT類型

TINYTEXT
TEXT
MEDIUMTEXT和
LONGTEXT
它們對應於四種BLOB類型,並具備相同的最大長度和存儲要求。

BLOB和TEXT類型之間的惟一區別在於對BLOB值進行排序和比較時區分大小寫,對TEXT值不區分大小寫。

3五、mysql_fetch_array和mysql_fetch_object的區別是什麼?

如下是mysql_fetch_array和mysql_fetch_object的區別:

mysql_fetch_array() - 將結果行做爲關聯數組或來自數據庫的常規數組返回。

mysql_fetch_object - 從數據庫返回結果行做爲對象。

3六、咱們如何在mysql中運行批處理模式?

如下命令用於在批處理模式下運行:

mysql;

mysql mysql.out

3七、MyISAM表格將在哪裏存儲,而且還提供其存儲格式?

每一個MyISAM表格以三種格式存儲在磁盤上:

·「.frm」文件存儲表定義

·數據文件具備「.MYD」(MYData)擴展名

索引文件具備「.MYI」(MYIndex)擴展名

38.、Mysql中有哪些不一樣的表格?

共有5種類型的表格:

MyISAM
Heap
Merge
INNODB
ISAM
MyISAM是Mysql的默認存儲引擎。

3九、ISAM是什麼?

ISAM簡稱爲索引順序訪問方法。它是由IBM開發的,用於在磁帶等輔助存儲系統上存儲和檢索數據。

40、InnoDB是什麼?

lnnoDB是一個由Oracle公司開發的Innobase Oy事務安全存儲引擎。

4一、Mysql如何優化DISTINCT?

DISTINCT在全部列上轉換爲GROUP BY,並與ORDER BY子句結合使用。

SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
4二、如何輸入字符爲十六進制數字?

若是想輸入字符爲十六進制數字,能夠輸入帶有單引號的十六進制數字和前綴(X),或者只用(Ox)前綴輸入十六進制數字。

若是表達式上下文是字符串,則十六進制數字串將自動轉換爲字符串。

4三、如何顯示前50行?

在Mysql中,使用如下代碼查詢顯示前50行:

SELECT*FROM

LIMIT 0,50;

4四、可使用多少列建立索引?

任何標準表最多能夠建立16個索引列。

4五、NOW()和CURRENT_DATE()有什麼區別?

NOW()命令用於顯示當前年份,月份,日期,小時,分鐘和秒。

CURRENT_DATE()僅顯示當前年份,月份和日期。

4六、什麼樣的對象可使用CREATE語句建立?

如下對象是使用CREATE語句建立的:

DATABASE
EVENT
FUNCTION
INDEX
PROCEDURE
TABLE
TRIGGER
USER
VIEW

4七、Mysql表中容許有多少個TRIGGERS?

在Mysql表中容許有六個觸發器,以下:

BEFORE INSERT
AFTER INSERT
BEFORE UPDATE
AFTER UPDATE
BEFORE DELETE
AFTER DELETE

4八、什麼是非標準字符串類型?

如下是非標準字符串類型:

TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT

4九、什麼是通用SQL函數?

CONCAT(A, B) - 鏈接兩個字符串值以建立單個字符串輸出。一般用於將兩個或多個字段合併爲一個字段。
FORMAT(X, D)- 格式化數字X到D有效數字。
CURRDATE(), CURRTIME()- 返回當前日期或時間。
NOW() - 將當前日期和時間做爲一個值返回。
MONTH(),DAY(),YEAR(),WEEK(),WEEKDAY() - 從日期值中提取給定數據。
HOUR(),MINUTE(),SECOND() - 從時間值中提取給定數據。
DATEDIFF(A,B) - 肯定兩個日期之間的差別,一般用於計算年齡
SUBTIMES(A,B) - 肯定兩次之間的差別。
FROMDAYS(INT) - 將整數天數轉換爲日期值。

50、解釋訪問控制列表

ACL(訪問控制列表)是與對象關聯的權限列表。這個列表是Mysql服務器安全模型的基礎,它有助於排除用戶沒法鏈接的問題。

Mysql將ACL(也稱爲受權表)緩存在內存中。當用戶嘗試認證或運行命令時,Mysql會按照預約的順序檢查ACL的認證信息和權限。

5一、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;
5二、 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存儲表示那個範圍的相應的端點值。

我但願本文能夠幫助你提高技術水平。那些,感受學的好難,甚至會令你沮喪的人,別擔憂,我認爲,若是你願意試一試本文介紹的幾點,會向前邁進,克服這種感受。這些要點也許對你不適用,但你會明確一個重要的道理:接受本身以爲受困這個事實是擺脫這個困境的第一步。

5三、MYSQL數據表在什麼狀況下容易損壞?

服務器忽然斷電致使數據文件損壞。

強制關機,沒有先關閉mysql 服務等。

5四、mysql有關權限的表都有哪幾個?

Mysql服務器經過權限表來控制用戶對數據庫的訪問,權限表存放在mysql數據庫裏,由mysql_install_db腳本初始化。這些權限表分別user,db,table_priv,columns_priv和host。

5五、Mysql中有哪幾種鎖?

MyISAM支持表鎖,InnoDB支持表鎖和行鎖,默認爲行鎖表級鎖:開銷小,加鎖快,不會出現死鎖。鎖定粒度大,發生鎖衝突的機率最高,併發量最低行級鎖:開銷大,加鎖慢,會出現死鎖。鎖力度小,發生鎖衝突的機率小,併發度最高

相關文章
相關標籤/搜索