去 BAT 面试,总结了这 55 道 MySQL 面试题
轉(zhuǎn)載自??去 BAT 面試,總結(jié)了這 55 道 MySQL 面試題
1、一張表,里面有ID自增主鍵,當(dāng)insert了17條記錄之后,刪除了第15,16,17條記錄,再把Mysql重啟,再insert一條記錄,這條記錄的ID是18還是15 ?
?
2、Mysql的技術(shù)特點(diǎn)是什么?
Mysql數(shù)據(jù)庫(kù)軟件是一個(gè)客戶端或服務(wù)器系統(tǒng),其中包括:支持各種客戶端程序和庫(kù)的多線程SQL服務(wù)器、不同的后端、廣泛的應(yīng)用程序編程接口和管理工具。
3、Heap表是什么?
HEAP表存在于內(nèi)存中,用于臨時(shí)高速存儲(chǔ)。
-
BLOB或TEXT字段是不允許的
-
只能使用比較運(yùn)算符=,<,>,=>,= <
-
HEAP表不支持AUTO_INCREMENT
-
索引不可為NULL
4、Mysql服務(wù)器默認(rèn)端口是什么?
Mysql服務(wù)器的默認(rèn)端口是3306。
5、與Oracle相比,Mysql有什么優(yōu)勢(shì)?
-
Mysql是開(kāi)源軟件,隨時(shí)可用,無(wú)需付費(fèi)。
-
Mysql是便攜式的
-
帶有命令提示符的GUI。
-
使用Mysql查詢(xún)?yōu)g覽器支持管理
6、如何區(qū)分FLOAT和DOUBLE?
以下是FLOAT和DOUBLE的區(qū)別:
-
浮點(diǎn)數(shù)以8位精度存儲(chǔ)在FLOAT中,并且有四個(gè)字節(jié)。
-
浮點(diǎn)數(shù)存儲(chǔ)在DOUBLE中,精度為18位,有八個(gè)字節(jié)。
7、區(qū)分CHAR_LENGTH和LENGTH?
CHAR_LENGTH是字符數(shù),而LENGTH是字節(jié)數(shù)。Latin字符的這兩個(gè)數(shù)據(jù)是相同的,但是對(duì)于Unicode和其他編碼,它們是不同的。
8、請(qǐng)簡(jiǎn)潔描述Mysql中InnoDB支持的四種事務(wù)隔離級(jí)別名稱(chēng),以及逐級(jí)之間的區(qū)別?
SQL標(biāo)準(zhǔn)定義的四個(gè)隔離級(jí)別為:
-
read uncommited :讀到未提交數(shù)據(jù)
-
read committed:臟讀,不可重復(fù)讀
-
repeatable read:可重讀
-
serializable :串行事物
?
?
9、在Mysql中ENUM的用法是什么?
ENUM是一個(gè)字符串對(duì)象,用于指定一組預(yù)定義的值,并可在創(chuàng)建表時(shí)使用。
Create table size(name ENUM('Smail,'Medium','Large');
10、如何定義REGEXP?
REGEXP是模式匹配,其中匹配模式在搜索值的任何位置。
11、CHAR和VARCHAR的區(qū)別?
以下是CHAR和VARCHAR的區(qū)別:
-
CHAR和VARCHAR類(lèi)型在存儲(chǔ)和檢索方面有所不同
-
CHAR列長(zhǎng)度固定為創(chuàng)建表時(shí)聲明的長(zhǎng)度,長(zhǎng)度值范圍是1到255
當(dāng)CHAR值被存儲(chǔ)時(shí),它們被用空格填充到特定長(zhǎng)度,檢索CHAR值時(shí)需刪除尾隨空格。
12、列的字符串類(lèi)型可以是什么?
字符串類(lèi)型是:
-
SET
-
BLOB
-
ENUM
-
CHAR
-
TEXT
-
VARCHAR
13、如何獲取當(dāng)前的Mysql版本?
SELECT VERSION();用于獲取當(dāng)前Mysql的版本。
14、Mysql中使用什么存儲(chǔ)引擎?
存儲(chǔ)引擎稱(chēng)為表類(lèi)型,數(shù)據(jù)使用各種技術(shù)存儲(chǔ)在文件中。
技術(shù)涉及:
-
Storage mechanism
-
Locking levels
-
Indexing
-
Capabilities and functions.
15、Mysql驅(qū)動(dòng)程序是什么?
以下是Mysql中可用的驅(qū)動(dòng)程序:
-
PHP驅(qū)動(dòng)程序
-
JDBC驅(qū)動(dòng)程序
-
ODBC驅(qū)動(dòng)程序
-
CWRAPPER
-
PYTHON驅(qū)動(dòng)程序
-
PERL驅(qū)動(dòng)程序
-
RUBY驅(qū)動(dòng)程序
-
CAP11PHP驅(qū)動(dòng)程序
-
Ado.net5.mxj
16、TIMESTAMP在UPDATE CURRENT_TIMESTAMP數(shù)據(jù)類(lèi)型上做什么?
創(chuàng)建表時(shí)TIMESTAMP列用Zero更新。只要表中的其他字段發(fā)生更改,UPDATE CURRENT_TIMESTAMP修飾符就將時(shí)間戳字段更新為當(dāng)前時(shí)間。
17、主鍵和候選鍵有什么區(qū)別?
表格的每一行都由主鍵唯一標(biāo)識(shí),一個(gè)表只有一個(gè)主鍵。
主鍵也是候選鍵。按照慣例,候選鍵可以被指定為主鍵,并且可以用于任何外鍵引用。
18、如何使用Unix shell登錄Mysql?
我們可以通過(guò)以下命令登錄:
# [mysql?dir]/bin/mysql?-h hostname -u <UserName> -p <password>
19、 myisamchk是用來(lái)做什么的?
它用來(lái)壓縮MyISAM表,這減少了磁盤(pán)或內(nèi)存使用。
20、MYSQL數(shù)據(jù)庫(kù)服務(wù)器性能分析的方法命令有哪些?
?
21、如何控制HEAP表的最大尺寸?
Heal表的大小可通過(guò)稱(chēng)為max_heap_table_size的Mysql配置變量來(lái)控制。
22、MyISAM Static和MyISAM Dynamic有什么區(qū)別?
在MyISAM Static上的所有字段有固定寬度。動(dòng)態(tài)MyISAM表將具有像TEXT,BLOB等字段,以適應(yīng)不同長(zhǎng)度的數(shù)據(jù)類(lèi)型。點(diǎn)擊這里有一套最全阿里面試題總結(jié)。
MyISAM Static在受損情況下更容易恢復(fù)。
23、federated表是什么?
federated表,允許訪問(wèn)位于其他服務(wù)器數(shù)據(jù)庫(kù)上的表。
24、如果一個(gè)表有一列定義為T(mén)IMESTAMP,將發(fā)生什么?
每當(dāng)行被更改時(shí),時(shí)間戳字段將獲取當(dāng)前時(shí)間戳。
25、列設(shè)置為AUTO INCREMENT時(shí),如果在表中達(dá)到最大值,會(huì)發(fā)生什么情況?
它會(huì)停止遞增,任何進(jìn)一步的插入都將產(chǎn)生錯(cuò)誤,因?yàn)槊荑€已被使用。
26、怎樣才能找出最后一次插入時(shí)分配了哪個(gè)自動(dòng)增量?
LAST_INSERT_ID將返回由Auto_increment分配的最后一個(gè)值,并且不需要指定表名稱(chēng)。
27、你怎么看到為表格定義的所有索引?
索引是通過(guò)以下方式為表格定義的:
SHOW INDEX FROM <tablename>;
28.、LIKE聲明中的%和_是什么意思?
%對(duì)應(yīng)于0個(gè)或更多字符,_只是LIKE語(yǔ)句中的一個(gè)字符。
29、如何在Unix和Mysql時(shí)間戳之間進(jìn)行轉(zhuǎn)換?
-
UNIX_TIMESTAMP是從Mysql時(shí)間戳轉(zhuǎn)換為Unix時(shí)間戳的命令
-
FROM_UNIXTIME是從Unix時(shí)間戳轉(zhuǎn)換為Mysql時(shí)間戳的命令
30、列對(duì)比運(yùn)算符是什么?
在SELECT語(yǔ)句的列比較中使用=,<>,<=,<,> =,>,<<,>>,<=>,AND,OR或LIKE運(yùn)算符。
31、我們?nèi)绾蔚玫绞懿樵?xún)影響的行數(shù)?
行數(shù)可以通過(guò)以下代碼獲得:
SELECT COUNT(user_id)FROM users;
32、Mysql查詢(xún)是否區(qū)分大小寫(xiě)?
不區(qū)分
SELECT VERSION(), CURRENT_DATE;
SeLect version(), current_date;
seleCt vErSiOn(), current_DATE;
所有這些例子都是一樣的,Mysql不區(qū)分大小寫(xiě)。
33.、LIKE和REGEXP操作有什么區(qū)別?
LIKE和REGEXP運(yùn)算符用于表示^和%。
| 1 2 | SELECT * FROM employee WHERE emp_name REGEXP "^b"; SELECT * FROM employee WHERE emp_name LIKE "%b"; |
34.、BLOB和TEXT有什么區(qū)別?
BLOB是一個(gè)二進(jìn)制對(duì)象,可以容納可變數(shù)量的數(shù)據(jù)。有四種類(lèi)型的BLOB -
-
TINYBLOB
-
BLOB
-
MEDIUMBLOB和
-
LONGBLOB
它們只能在所能容納價(jià)值的最大長(zhǎng)度上有所不同。
TEXT是一個(gè)不區(qū)分大小寫(xiě)的BLOB。四種TEXT類(lèi)型
-
TINYTEXT
-
TEXT
-
MEDIUMTEXT和
-
LONGTEXT
它們對(duì)應(yīng)于四種BLOB類(lèi)型,并具有相同的最大長(zhǎng)度和存儲(chǔ)要求。
BLOB和TEXT類(lèi)型之間的唯一區(qū)別在于對(duì)BLOB值進(jìn)行排序和比較時(shí)區(qū)分大小寫(xiě),對(duì)TEXT值不區(qū)分大小寫(xiě)。
35、mysql_fetch_array和mysql_fetch_object的區(qū)別是什么?
以下是mysql_fetch_array和mysql_fetch_object的區(qū)別:
mysql_fetch_array() - 將結(jié)果行作為關(guān)聯(lián)數(shù)組或來(lái)自數(shù)據(jù)庫(kù)的常規(guī)數(shù)組返回。
mysql_fetch_object - 從數(shù)據(jù)庫(kù)返回結(jié)果行作為對(duì)象。
36、我們?nèi)绾卧?/strong>mysql中運(yùn)行批處理模式?
以下命令用于在批處理模式下運(yùn)行:
mysql;
mysql?mysql.out
37、MyISAM表格將在哪里存儲(chǔ),并且還提供其存儲(chǔ)格式?
每個(gè)MyISAM表格以三種格式存儲(chǔ)在磁盤(pán)上:
·“.frm”文件存儲(chǔ)表定義
·數(shù)據(jù)文件具有“.MYD”(MYData)擴(kuò)展名
索引文件具有“.MYI”(MYIndex)擴(kuò)展名
38.、Mysql中有哪些不同的表格?
共有5種類(lèi)型的表格:
-
MyISAM
-
Heap
-
Merge
-
INNODB
-
ISAM
MyISAM是Mysql的默認(rèn)存儲(chǔ)引擎。
39、ISAM是什么?
ISAM簡(jiǎn)稱(chēng)為索引順序訪問(wèn)方法。它是由IBM開(kāi)發(fā)的,用于在磁帶等輔助存儲(chǔ)系統(tǒng)上存儲(chǔ)和檢索數(shù)據(jù)。
40、InnoDB是什么?
lnnoDB是一個(gè)由Oracle公司開(kāi)發(fā)的Innobase Oy事務(wù)安全存儲(chǔ)引擎。
41、Mysql如何優(yōu)化DISTINCT?
DISTINCT在所有列上轉(zhuǎn)換為GROUP BY,并與ORDER BY子句結(jié)合使用。
| 1 | SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a; |
42、如何輸入字符為十六進(jìn)制數(shù)字?
如果想輸入字符為十六進(jìn)制數(shù)字,可以輸入帶有單引號(hào)的十六進(jìn)制數(shù)字和前綴(X),或者只用(Ox)前綴輸入十六進(jìn)制數(shù)字。
如果表達(dá)式上下文是字符串,則十六進(jìn)制數(shù)字串將自動(dòng)轉(zhuǎn)換為字符串。
43、如何顯示前50行?
在Mysql中,使用以下代碼查詢(xún)顯示前50行:
SELECT*FROM
LIMIT 0,50;
44、可以使用多少列創(chuàng)建索引?
任何標(biāo)準(zhǔn)表最多可以創(chuàng)建16個(gè)索引列。
45、NOW()和CURRENT_DATE()有什么區(qū)別?
NOW()命令用于顯示當(dāng)前年份,月份,日期,小時(shí),分鐘和秒。
CURRENT_DATE()僅顯示當(dāng)前年份,月份和日期。
46、什么樣的對(duì)象可以使用CREATE語(yǔ)句創(chuàng)建?
以下對(duì)象是使用CREATE語(yǔ)句創(chuàng)建的:
-
DATABASE
-
EVENT
-
FUNCTION
-
INDEX
-
PROCEDURE
-
TABLE
-
TRIGGER
-
USER
-
VIEW
47、Mysql表中允許有多少個(gè)TRIGGERS?
在Mysql表中允許有六個(gè)觸發(fā)器,如下:
-
BEFORE INSERT
-
AFTER INSERT
-
BEFORE UPDATE
-
AFTER UPDATE
-
BEFORE DELETE
-
AFTER DELETE
48、什么是非標(biāo)準(zhǔn)字符串類(lèi)型?
以下是非標(biāo)準(zhǔn)字符串類(lèi)型:
-
TINYTEXT
-
TEXT
-
MEDIUMTEXT
-
LONGTEXT
49、什么是通用SQL函數(shù)?
-
CONCAT(A, B) - 連接兩個(gè)字符串值以創(chuàng)建單個(gè)字符串輸出。通常用于將兩個(gè)或多個(gè)字段合并為一個(gè)字段。
-
FORMAT(X, D)- 格式化數(shù)字X到D有效數(shù)字。
-
CURRDATE(), CURRTIME()- 返回當(dāng)前日期或時(shí)間。
-
NOW() - 將當(dāng)前日期和時(shí)間作為一個(gè)值返回。
-
MONTH(),DAY(),YEAR(),WEEK(),WEEKDAY() - 從日期值中提取給定數(shù)據(jù)。
-
HOUR(),MINUTE(),SECOND() - 從時(shí)間值中提取給定數(shù)據(jù)。
-
DATEDIFF(A,B) - 確定兩個(gè)日期之間的差異,通常用于計(jì)算年齡
-
SUBTIMES(A,B) - 確定兩次之間的差異。
-
FROMDAYS(INT) - 將整數(shù)天數(shù)轉(zhuǎn)換為日期值。
50、解釋訪問(wèn)控制列表
ACL(訪問(wèn)控制列表)是與對(duì)象關(guān)聯(lián)的權(quán)限列表。這個(gè)列表是Mysql服務(wù)器安全模型的基礎(chǔ),它有助于排除用戶無(wú)法連接的問(wèn)題。
Mysql將ACL(也稱(chēng)為授權(quán)表)緩存在內(nèi)存中。當(dāng)用戶嘗試認(rèn)證或運(yùn)行命令時(shí),Mysql會(huì)按照預(yù)定的順序檢查ACL的認(rèn)證信息和權(quán)限。
51、MYSQL支持事務(wù)嗎?
在缺省模式下,MYSQL是autocommit模式的,所有的數(shù)據(jù)庫(kù)更新操作都會(huì)即時(shí)提交,所以在缺省情況下,mysql是不支持事務(wù)的。
但是如果你的MYSQL表類(lèi)型是使用InnoDB Tables 或 BDB tables的話,你的MYSQL就可以使用事務(wù)處理,使用SET AUTOCOMMIT=0就可以使MYSQL允許在非autocommit模式,在非autocommit模式下,你必須使用COMMIT來(lái)提交你的更改,或者用ROLLBACK來(lái)回滾你的更改。
示例如下:
一
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
52、?mysql里記錄貨幣用什么字段類(lèi)型好
NUMERIC和DECIMAL類(lèi)型被Mysql實(shí)現(xiàn)為同樣的類(lèi)型,這在SQL92標(biāo)準(zhǔn)允許。他們被用于保存值,該值的準(zhǔn)確精度是極其重要的值,例如與金錢(qián)有關(guān)的數(shù)據(jù)。當(dāng)聲明一個(gè)類(lèi)是這些類(lèi)型之一時(shí),精度和規(guī)模的能被(并且通常是)指定;點(diǎn)擊這里有一套最全阿里面試題總結(jié)。
例如:
salary DECIMAL(9,2)
在這個(gè)例子中,9(precision)代表將被用于存儲(chǔ)值的總的小數(shù)位數(shù),而2(scale)代表將被用于存儲(chǔ)小數(shù)點(diǎn)后的位數(shù)。
因此,在這種情況下,能被存儲(chǔ)在salary列中的值的范圍是從-9999999.99到9999999.99。在ANSI/ISO SQL92中,句法DECIMAL(p)等價(jià)于DECIMAL(p,0)。
同樣,句法DECIMAL等價(jià)于DECIMAL(p,0),這里實(shí)現(xiàn)被允許決定值p。Mysql當(dāng)前不支持DECIMAL/NUMERIC數(shù)據(jù)類(lèi)型的這些變種形式的任一種。
這一般說(shuō)來(lái)不是一個(gè)嚴(yán)重的問(wèn)題,因?yàn)檫@些類(lèi)型的主要益處得自于明顯地控制精度和規(guī)模的能力。
DECIMAL和NUMERIC值作為字符串存儲(chǔ),而不是作為二進(jìn)制浮點(diǎn)數(shù),以便保存那些值的小數(shù)精度。
一個(gè)字符用于值的每一位、小數(shù)點(diǎn)(如果scale>0)和“-”符號(hào)(對(duì)于負(fù)值)。如果scale是0,DECIMAL和NUMERIC值不包含小數(shù)點(diǎn)或小數(shù)部分。
DECIMAL和NUMERIC值得最大的范圍與DOUBLE一樣,但是對(duì)于一個(gè)給定的DECIMAL或NUMERIC列,實(shí)際的范圍可由制由給定列的precision或scale限制。
當(dāng)這樣的列賦給了小數(shù)點(diǎn)后面的位超過(guò)指定scale所允許的位的值,該值根據(jù)scale四舍五入。
當(dāng)一個(gè)DECIMAL或NUMERIC列被賦給了其大小超過(guò)指定(或缺省的)precision和scale隱含的范圍的值,Mysql存儲(chǔ)表示那個(gè)范圍的相應(yīng)的端點(diǎn)值。
我希望本文可以幫助你提升技術(shù)水平。那些,感覺(jué)學(xué)的好難,甚至?xí)钅憔趩实娜?#xff0c;別擔(dān)心,我認(rèn)為,如果你愿意試一試本文介紹的幾點(diǎn),會(huì)向前邁進(jìn),克服這種感覺(jué)。這些要點(diǎn)也許對(duì)你不適用,但你會(huì)明確一個(gè)重要的道理:接受自己覺(jué)得受困這個(gè)事實(shí)是擺脫這個(gè)困境的第一步。
53、MYSQL數(shù)據(jù)表在什么情況下容易損壞?
服務(wù)器突然斷電導(dǎo)致數(shù)據(jù)文件損壞。
強(qiáng)制關(guān)機(jī),沒(méi)有先關(guān)閉mysql?服務(wù)等。
54、mysql有關(guān)權(quán)限的表都有哪幾個(gè)?
Mysql服務(wù)器通過(guò)權(quán)限表來(lái)控制用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),權(quán)限表存放在mysql數(shù)據(jù)庫(kù)里,由mysql_install_db腳本初始化。這些權(quán)限表分別user,db,table_priv,columns_priv和host。
55、Mysql中有哪幾種鎖?
-
MyISAM支持表鎖,InnoDB支持表鎖和行鎖,默認(rèn)為行鎖
-
表級(jí)鎖:開(kāi)銷(xiāo)小,加鎖快,不會(huì)出現(xiàn)死鎖。鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)量最低
-
行級(jí)鎖:開(kāi)銷(xiāo)大,加鎖慢,會(huì)出現(xiàn)死鎖。鎖力度小,發(fā)生鎖沖突的概率小,并發(fā)度最高
總結(jié)
以上是生活随笔為你收集整理的去 BAT 面试,总结了这 55 道 MySQL 面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: qqid身份卡怎么设置
- 下一篇: Redis 再牛逼,也得设置密码