Mysql數(shù)據(jù)庫(kù)相關(guān)面試題總結(jié)(30道)

1、列舉常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型都有那些?

關(guān)系型數(shù)據(jù)庫(kù):Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL

非關(guān)系型數(shù)據(jù)庫(kù):NoSql、Cloudant、MongoDb、redis、HBase

兩種數(shù)據(jù)庫(kù)之間的區(qū)別:

關(guān)系型數(shù)據(jù)庫(kù):

關(guān)系型數(shù)據(jù)庫(kù)的特性

1、關(guān)系型數(shù)據(jù)庫(kù),是指采用了關(guān)系模型來(lái)組織數(shù)據(jù)的數(shù)據(jù)庫(kù);

2、關(guān)系型數(shù)據(jù)庫(kù)的最大特點(diǎn)就是事務(wù)的一致性;

3、簡(jiǎn)單來(lái)說(shuō),關(guān)系模型指的就是二維表格模型,而一個(gè)關(guān)系型數(shù)據(jù)庫(kù)就是由二維表及其之間的聯(lián)系所組成的一個(gè)數(shù)據(jù)組織。

關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)

1、容易理解:二維表結(jié)構(gòu)是非常貼近邏輯世界一個(gè)概念,關(guān)系模型相對(duì)網(wǎng)狀、層次等其他模型來(lái)說(shuō)更容易理解;

2、使用方便:通用的SQL語(yǔ)言使得操作關(guān)系型數(shù)據(jù)庫(kù)非常方便;

3、易于維護(hù):豐富的完整性(實(shí)體完整性、參照完整性和用戶(hù)定義的完整性)大大減低了數(shù)據(jù)冗余和數(shù)據(jù)不一致的概率;

4、支持SQL,可用于復(fù)雜的查詢(xún)。

關(guān)系型數(shù)據(jù)庫(kù)的缺點(diǎn)

1、為了維護(hù)一致性所付出的巨大代價(jià)就是其讀寫(xiě)性能比較差;

2、固定的表結(jié)構(gòu);

3、高并發(fā)讀寫(xiě)需求;

4、海量數(shù)據(jù)的高效率讀寫(xiě);

非關(guān)系型數(shù)據(jù)庫(kù)

非關(guān)系型數(shù)據(jù)庫(kù)的特性

1、使用鍵值對(duì)存儲(chǔ)數(shù)據(jù);

2、分布式;

3、一般不支持ACID特性;

4、非關(guān)系型數(shù)據(jù)庫(kù)嚴(yán)格上不是一種數(shù)據(jù)庫(kù),應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲(chǔ)方法的集合。

非關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)

1、無(wú)需經(jīng)過(guò)sql層的解析,讀寫(xiě)性能很高;

2、基于鍵值對(duì),數(shù)據(jù)沒(méi)有耦合性,容易擴(kuò)展;

3、存儲(chǔ)數(shù)據(jù)的格式:nosql的存儲(chǔ)格式是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,

而關(guān)系型數(shù)據(jù)庫(kù)則只支持基礎(chǔ)類(lèi)型。

非關(guān)系型數(shù)據(jù)庫(kù)的缺點(diǎn)

1、不提供sql支持,學(xué)習(xí)和使用成本較高;

2、無(wú)事務(wù)處理,附加功能bi和報(bào)表等支持也不好;

2、MySQL常見(jiàn)數(shù)據(jù)庫(kù)引擎及比較?

常見(jiàn)的數(shù)據(jù)庫(kù)引擎是MyiSAM和inmoDB

比較:

MyISAM:

1、它不支持事務(wù),也不支持外鍵,其優(yōu)勢(shì)是訪問(wèn)的速度快

innoDB:

1、InnoDB支持事務(wù)安全,對(duì)比MyISAM引擎,InnoDB寫(xiě)的效率差一些,并且會(huì)占據(jù)更多的磁盤(pán)空間。

2、MySQL支持外鍵的存儲(chǔ)引擎只有InnoDB

3、簡(jiǎn)述數(shù)據(jù)三大范式?

第一范式( 1NF):字段具有原子性,不可再分。

第二范式( 2NF):是在第一范式( 1NF) 的基礎(chǔ)上建立起來(lái)的,要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)例或行必須可以被惟一地區(qū)分。通常需要為表加上一個(gè)列, 以存儲(chǔ)各個(gè)實(shí)例的惟一標(biāo)識(shí)。 這個(gè)惟一屬性列被稱(chēng)為主關(guān)鍵字或主鍵。

第三范式( 3NF):必須先滿(mǎn)足第二范式( 2NF)。 簡(jiǎn)而言之, 第三范式( 3NF) 要求一個(gè)數(shù)據(jù)庫(kù)表中不包含已在其它表中已包含的非主關(guān)鍵字信息。所以第三范式具有如下特征:1, 每一列只有一個(gè)值。2, 每一行都能區(qū)分。3, 每一個(gè)表都不包含其他表已經(jīng)包含的非主關(guān)鍵字信息。

4、什么是事務(wù)?什么是鎖?MySQL如何支持事務(wù)?

事務(wù):主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。一般來(lái)說(shuō),事務(wù)是必須滿(mǎn)足4個(gè)條件(ACID):

原子性:所謂原子操作是指不會(huì)被線程調(diào)度機(jī)制打斷的操作;這種操作一旦開(kāi)始,就一直運(yùn)行到結(jié)束,中間不會(huì)有任何 context switch (切換到另一個(gè)線程)。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開(kāi)始前的狀態(tài),就像這個(gè)事務(wù)從來(lái)沒(méi)有執(zhí)行過(guò)一樣。

一致性:在事務(wù)開(kāi)始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性沒(méi)有被破壞。這表示寫(xiě)入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫(kù)可以自發(fā)性地完成預(yù)定的工作。

隔離性:數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫(xiě)和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行,而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級(jí)別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。

持久性:事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會(huì)丟失。

– 鎖:是實(shí)現(xiàn)事務(wù)的關(guān)鍵,所可以保證事務(wù)的完整性和并發(fā)行,與現(xiàn)實(shí)生活中的鎖一樣,可以使某些數(shù)據(jù)的擁有者,在某段時(shí)間內(nèi)不能使用某些數(shù)據(jù)或者數(shù)據(jù)結(jié)構(gòu)。

注意:MySQL 中只有使用了 Innodb 數(shù)據(jù)庫(kù)引擎的數(shù)據(jù)庫(kù)或表才支持事務(wù)。

5、簡(jiǎn)述數(shù)據(jù)庫(kù)設(shè)計(jì)中一對(duì)多和多對(duì)多的應(yīng)用場(chǎng)景?

一對(duì)多:當(dāng)在數(shù)據(jù)庫(kù)的設(shè)計(jì)中,涉及到一個(gè)對(duì)象可以包含多個(gè)另外對(duì)象,而單個(gè)另外對(duì)象只能對(duì)應(yīng)一個(gè)對(duì)象時(shí)就產(chǎn)生了一對(duì)多的關(guān)系,例學(xué)生和班級(jí),這種情況通常將外鍵設(shè)在多的對(duì)象表結(jié)構(gòu)中。

多對(duì)多:當(dāng)在數(shù)據(jù)庫(kù)的設(shè)計(jì)中,涉及到一個(gè)對(duì)象可以包含多個(gè)另外對(duì)象,而單個(gè)另外對(duì)象也對(duì)應(yīng)多個(gè)對(duì)象時(shí)就產(chǎn)生了多對(duì)多的關(guān)系,例書(shū)籍和作者,這種情況通常將外鍵設(shè)在多的對(duì)象表結(jié)構(gòu)中。

6、簡(jiǎn)述觸發(fā)器、函數(shù)、視圖、存儲(chǔ)過(guò)程?

觸發(fā)器:使用觸發(fā)器可以定制用戶(hù)對(duì)表進(jìn)行【增、刪、改】操作時(shí)前后的行為,觸發(fā)器無(wú)法由用戶(hù)直接調(diào)用,而知由于對(duì)表的【增/刪/改】操作被動(dòng)引發(fā)的

函數(shù):是MySQL數(shù)據(jù)庫(kù)提供的內(nèi)部函數(shù)(當(dāng)然也可以自定義函數(shù))。這些內(nèi)部函數(shù)可以幫助用戶(hù)更加方便的處理表中的數(shù)據(jù)

視圖:視圖是虛擬表或邏輯表,它被定義為具有連接的SQL SELECT查詢(xún)語(yǔ)句。

存儲(chǔ)過(guò)程:存儲(chǔ)過(guò)程是存儲(chǔ)在數(shù)據(jù)庫(kù)目錄中的一坨的聲明性SQL語(yǔ)句,數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象,有效提高了程序的性能

7、MySQL索引種類(lèi)

普通索引、唯一索引(主鍵索引、唯一索引)、聯(lián)合索引、全文索引、空間索引

8、索引在什么情況下遵循最左前綴的規(guī)則?

在建立了聯(lián)合索引的前提條件下,數(shù)據(jù)庫(kù)會(huì)一直從左向右的順序依次查找,直到遇到了范圍查詢(xún)(>,<,between,like等)

9、主鍵和外鍵的區(qū)別?

主鍵:是指表中一個(gè)列或者列的組合,其值能夠唯一的標(biāo)識(shí)表中的每一個(gè)行。這樣的一列或者多列成為表的主鍵,通過(guò)它可以強(qiáng)制表的實(shí)體完整性。當(dāng)創(chuàng)建或者更改表時(shí)可以通過(guò)定義PRIMARY KEY約束來(lái)創(chuàng)建主鍵,一個(gè)表只能有一個(gè)主鍵約束,而且主鍵約束中的列不能是空值,由于主鍵約束確保唯一數(shù)據(jù),所一經(jīng)常來(lái)定義標(biāo)識(shí)列。

外鍵:外鍵是建立于表與表之間的聯(lián)系。外鍵保證了數(shù)據(jù)的完整性,使用外鍵,簡(jiǎn)單直觀,可以直接在數(shù)據(jù)模型中體現(xiàn),無(wú)論是設(shè)計(jì)、維護(hù)等。

10、MySQL常見(jiàn)的函數(shù)?

聚合函數(shù):avg,min,max,count,sum,

字符串處理函數(shù):

合并字符串函數(shù):concat(str1,str2,str3…)

比較字符串大小函數(shù):strcmp(str1,str2)

獲取字符串字節(jié)數(shù)函數(shù):length(str)

獲取字符串字符數(shù)函數(shù):char_length(str)

字母大小寫(xiě)轉(zhuǎn)換函數(shù):大寫(xiě):upper(x),ucase(x);小寫(xiě)lower(x),lcase(x)

處理數(shù)值的函數(shù):

絕對(duì)值函數(shù):abs(x)

向上取整函數(shù):ceil(x)

向下取整函數(shù):floor(x)

取模函數(shù):mod(x,y)

隨機(jī)數(shù)函數(shù):rand()

四舍五入函數(shù):round(x,y)

數(shù)值截取函數(shù):truncate(x,y)

用于處理時(shí)間日期的函數(shù):

獲取當(dāng)前日期:curdate(),current_date()

獲取當(dāng)前時(shí)間:curtime(),current_time()

獲取當(dāng)前日期時(shí)間:now()

從日期中選擇出月份數(shù):month(date),monthname(date)

從日期中選擇出周數(shù):week(date)

從日期中選擇出周數(shù):year(date)

從時(shí)間中選擇出小時(shí)數(shù):hour(time)

從時(shí)間中選擇出分鐘數(shù):minute(time)

從時(shí)間中選擇出今天是周幾:weekday(date),dayname(date)

11、列舉創(chuàng)建索引但是無(wú)法命中索引的8種情況。

1、查詢(xún)條件中有or、not in、not exist等

2、小表查詢(xún)

3、like查詢(xún)是以%開(kāi)頭

4、如果列類(lèi)型是字符串,那一定要在條件中將數(shù)據(jù)使用引號(hào)引用起來(lái),否則不使用索引

5、沒(méi)有使用索引字段查詢(xún)

6、對(duì)索引列進(jìn)行運(yùn)算,需要建立函數(shù)索引

7、單獨(dú)引用聯(lián)合索引中的非第一位置的索引

8、沒(méi)有查詢(xún)條件

12、如何開(kāi)啟慢日志查詢(xún)?

參數(shù)說(shuō)明:

slow_query_log:慢查詢(xún)開(kāi)啟狀態(tài)

slow_query_log_file:慢查詢(xún)?nèi)罩敬娣诺奈恢茫ㄟ@個(gè)目錄需要MySQL的運(yùn)行帳號(hào)的可寫(xiě)權(quán)限,一般設(shè)置為MySQL的數(shù)據(jù)存放目錄)

long_query_time:查詢(xún)超過(guò)多少秒才記錄

開(kāi)啟慢日志查詢(xún)方法一:全局變量設(shè)置

1、將 slow_query_log 全局變量設(shè)置為“ON”狀態(tài)。指令示例:mysql> set global slow_query_log=’ON’;

2、設(shè)置慢查詢(xún)?nèi)罩敬娣诺奈恢茫簃ysql> set global slow_query_log_file=’/usr/local/mysql/data/slow.log’;

3、查詢(xún)超過(guò)1秒就記錄:mysql> set global long_query_time=1;

開(kāi)啟慢日志查詢(xún)方法二: 配置文件設(shè)置

修改配置文件my.cnf,在[mysqld]下的下方加入:

[mysqld]

slow_query_log = ON

slow_query_log_file = /usr/local/mysql/data/slow.log

long_query_time = 1

修改完參數(shù)后重啟數(shù)據(jù)庫(kù)服務(wù)就可以了

13、數(shù)據(jù)庫(kù)導(dǎo)入導(dǎo)出命令(結(jié)構(gòu)+數(shù)據(jù))?

導(dǎo)出數(shù)據(jù)庫(kù)結(jié)構(gòu)和數(shù)據(jù):mysqldump -u用戶(hù)名 -p密碼 數(shù)據(jù)庫(kù)名> 路徑+導(dǎo)出的文件名.sql

導(dǎo)出數(shù)據(jù)庫(kù)所有表結(jié)構(gòu):mysqldump -u用戶(hù)名 -p密碼 -d 數(shù)據(jù)庫(kù)名>路徑+文件名.sql

導(dǎo)出數(shù)據(jù)表結(jié)構(gòu)和數(shù)據(jù):mysqldump -u用戶(hù)名 -p密碼 數(shù)據(jù)庫(kù)名 表名>路徑+文件名.sql

導(dǎo)出數(shù)據(jù)表結(jié)構(gòu):mysqldump -u用戶(hù)名 -p密碼 -d 數(shù)據(jù)庫(kù)名 表名>路徑+文件名.sql

14、 數(shù)據(jù)庫(kù)優(yōu)化的思路

– 1.SQL語(yǔ)句優(yōu)化

1)應(yīng)盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進(jìn)行全表掃描。

2)應(yīng)盡量避免在 where 子句中對(duì)字段進(jìn)行 null 值判斷,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,如:select id from t where num is null

可以在num上設(shè)置默認(rèn)值0,確保表中num列沒(méi)有null值**,然后這樣查詢(xún):

select id from t where num=0

3)很多時(shí)候用 exists 代替 in 是一個(gè)好的選擇

4)用Where子句替換HAVING 子句 因?yàn)镠AVING 只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過(guò)濾

– 2.索引優(yōu)化

合理使用:普通索引、唯一索引(主鍵索引、唯一索引)、聯(lián)合索引、全文索引、空間索引

– 3.數(shù)據(jù)庫(kù)結(jié)構(gòu)優(yōu)化

1)范式優(yōu)化:

比如消除冗余(節(jié)省空間。。)

2)反范式優(yōu)化:

比如適當(dāng)加冗余等(減少join)

3)拆分表:

分區(qū)將數(shù)據(jù)在物理上分隔開(kāi),不同分區(qū)的數(shù)據(jù)可以制定保存在處于不同磁盤(pán)上的數(shù)據(jù)文件里。這樣,當(dāng)對(duì)這個(gè)表進(jìn)行查詢(xún)時(shí),只需要在表分區(qū)中進(jìn)行掃描,而不必進(jìn)行全表掃描,明顯縮短了查詢(xún)時(shí)間,另外處于不同磁盤(pán)的分區(qū)也將對(duì)這個(gè)表的數(shù)據(jù)傳輸分散在不同的磁盤(pán)I/O,一個(gè)精心設(shè)置的分區(qū)可以將數(shù)據(jù)傳輸對(duì)磁盤(pán)I/O競(jìng)爭(zhēng)均勻地分散開(kāi)。對(duì)數(shù)據(jù)量大的時(shí)時(shí)表可采取此方法??砂丛伦詣?dòng)建表分區(qū)。

4)拆分其實(shí)又分垂直拆分和水平拆分:

案例: 簡(jiǎn)單購(gòu)物系統(tǒng)暫設(shè)涉及如下表:

1.產(chǎn)品表(數(shù)據(jù)量10w,穩(wěn)定)

2.訂單表(數(shù)據(jù)量200w,且有增長(zhǎng)趨勢(shì))

3.用戶(hù)表 (數(shù)據(jù)量100w,且有增長(zhǎng)趨勢(shì)) 以mysql為例講述下水平拆分和垂直拆分,mysql能容忍的數(shù)量級(jí)在百萬(wàn)靜態(tài)數(shù)據(jù)可以到千萬(wàn)。

垂直拆分:解決問(wèn)題:表與表之間的io競(jìng)爭(zhēng) 。不解決問(wèn)題:?jiǎn)伪碇袛?shù)據(jù)量增長(zhǎng)出現(xiàn)的壓力。

方案: 把產(chǎn)品表和用戶(hù)表放到一個(gè)server上 訂單表單獨(dú)放到一個(gè)server上

水平拆分:解決問(wèn)題:?jiǎn)伪碇袛?shù)據(jù)量增長(zhǎng)出現(xiàn)的壓力 不解決問(wèn)題:表與表之間的io爭(zhēng)奪。

方案: 用戶(hù)表通過(guò)性別拆分為男用戶(hù)表和女用戶(hù)表,訂單表通過(guò)已完成和完成中拆分為已完成訂單和未完成訂單, 產(chǎn)品表、未完成訂單放一個(gè)server上;已完成訂單表和男用戶(hù)表放一個(gè)server上;女用戶(hù)表放一個(gè)server上(女的愛(ài)購(gòu)物 哈哈)

– 4.服務(wù)器硬件優(yōu)化

15、char和varchar的區(qū)別?

char的長(zhǎng)度是不可變的,而varchar的長(zhǎng)度是可變的。char的存取速度還是要比varchar要快得多,因?yàn)槠溟L(zhǎng)度固定,方便程序的存儲(chǔ)與查找;但是char也為此付出的是空間的代價(jià),因?yàn)槠溟L(zhǎng)度固定,所以難免會(huì)有多余的空格占位符占據(jù)空間,可謂是以空間換取時(shí)間效率,而varchar是以空間效率為首位的。再者,char的存儲(chǔ)方式是,對(duì)英文字符(ASCII)占用1個(gè)字節(jié),對(duì)一個(gè)漢字占用兩個(gè)字節(jié);而varchar的存儲(chǔ)方式是,對(duì)每個(gè)英文字符占用2個(gè)字節(jié),漢字也占用2個(gè)字節(jié)。

16、簡(jiǎn)述MySQL的執(zhí)行計(jì)劃?

在工作過(guò)程中,有時(shí)候會(huì)對(duì)慢查詢(xún)進(jìn)行調(diào)優(yōu)。對(duì)于MySQL的SQL語(yǔ)句調(diào)優(yōu),MySQL本身提供了強(qiáng)大的explain關(guān)鍵字用于查詢(xún)分析執(zhí)行計(jì)劃。

語(yǔ)法:從語(yǔ)法角度explain和describe/desc是相同的,只是一般更常用desc看表結(jié)構(gòu),explain來(lái)看查詢(xún)計(jì)劃。

詳細(xì)了解請(qǐng)點(diǎn)鏈接:http://www.cnblogs.com/micrari/p/6583482.html

17、在對(duì)name做了唯一索引前提下,簡(jiǎn)述以下區(qū)別:

select * from tb where name = ‘Oldboy-Wupeiqi’ # 全局遍歷找所有

select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1 # 鎖定一條就結(jié)束

18、1000w條數(shù)據(jù),使用limit offset 分頁(yè)時(shí),為什么越往后翻越慢?如何解決?

原因:越是向后,掃描的數(shù)據(jù)也就越多

解決方案:

1、limit限制優(yōu)化法:把limit偏移量限制低于某個(gè)數(shù)。。超過(guò)這個(gè)數(shù)等于沒(méi)數(shù)據(jù)

2、存儲(chǔ)本頁(yè)數(shù)據(jù)兩端的主鍵,按主鍵查找后向前或向后取多少條

19、什么是索引合并?

索引合并:是把幾個(gè)索引的范圍掃描合并成一個(gè)索引。索引合并的時(shí)候,會(huì)對(duì)索引進(jìn)行并集,交集或者先交集再并集操作,以便合并成一個(gè)索引。這些需要合并的索引只能是一個(gè)表的。不能對(duì)多表進(jìn)行索引合并。

20、什么是覆蓋索引?

MySQL可以利用索引返回SELECT 列表中的字段。而不必根據(jù)索引再次讀取數(shù)據(jù)文件。 包含所有滿(mǎn)足查詢(xún)需要的數(shù)據(jù)的索引成為覆蓋索引(Covering Index)。也就是平時(shí)所說(shuō)的不需要回表操作

21、left join、right join以及inner join的區(qū)別

left join 左關(guān)聯(lián),主表在左邊,右邊為從表。如果左側(cè)的主表中沒(méi)有關(guān)聯(lián)字段,會(huì)用null 填滿(mǎn)

right join 右關(guān)聯(lián) 主表在右邊和letf join相反

inner join 內(nèi)關(guān)聯(lián)只會(huì)顯示主表和從表相關(guān)聯(lián)的字段,不會(huì)出現(xiàn)null

22、寫(xiě)出一條Sql語(yǔ)句:取出表A中第31到第40記錄 (Mysql)

select * from A limit 30, 10

23、什么是數(shù)據(jù)庫(kù)約束,常見(jiàn)的約束有哪幾種?

數(shù)據(jù)庫(kù)約束用于保證數(shù)據(jù)庫(kù)、表數(shù)據(jù)的完整性(正確性和一致性)??梢酝ㄟ^(guò)定義約束\索引\觸發(fā)器來(lái)保證數(shù)據(jù)的完整性。

總體來(lái)講,約束可以分為:

主鍵約束:primary key;

外鍵約束:foreign key;

唯一約束:unique;

檢查約束:check;

空值約束:not null;

默認(rèn)值約束:default;

24、從數(shù)據(jù)庫(kù)中隨機(jī)取50條數(shù)據(jù)

select * from 表 order by rand() limit50;

25、什么是sql注入?

SQL注入攻擊指的是通過(guò)構(gòu)建特殊的輸入作為參數(shù)傳入Web應(yīng)用程序,而這些輸入大都是SQL語(yǔ)法里的一些組合,通過(guò)執(zhí)行SQL語(yǔ)句進(jìn)而執(zhí)行攻擊者所要的操作,其主要原因是程序沒(méi)有細(xì)致地過(guò)濾用戶(hù)輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)。

26、關(guān)于sql語(yǔ)句應(yīng)該考慮哪些安全性?

1.防止sql注入,對(duì)特殊字符進(jìn)行轉(zhuǎn)義,過(guò)濾或者使用預(yù)編譯的sql語(yǔ)句綁定變量。

2.最小權(quán)限原則,特別是不要用root賬戶(hù),為不同的類(lèi)型的動(dòng)作或者組建使用不同的賬戶(hù)。

3.當(dāng)sql運(yùn)行出錯(cuò)時(shí),不要把數(shù)據(jù)庫(kù)返回的錯(cuò)誤信息全部顯示給用戶(hù),以防止泄漏服務(wù)器和數(shù)據(jù)庫(kù)相關(guān)信息。

27、一張表,里面有ID自增主鍵,當(dāng)insert了17條記錄之后,刪除了第15,16,17條記錄,再把Mysql重啟,再insert一條記錄,這條記錄的ID是18還是15 ?

如果表的類(lèi)型是MyISAM,那么是18。

因?yàn)镸yISAM表會(huì)把自增主鍵的最大ID記錄到數(shù)據(jù)文件里,重啟MySQL自增主鍵的最大ID也不會(huì)丟失。

如果表的類(lèi)型是InnoDB,那么是15。

InnoDB表只是把自增主鍵的最大ID記錄到內(nèi)存中,所以重啟數(shù)據(jù)庫(kù)或者是對(duì)表進(jìn)行OPTIMIZE操作,都會(huì)導(dǎo)致最大ID丟失。

28、怎么把這樣一個(gè)數(shù)據(jù)庫(kù)表

year month amount

1991 1 1.1

1991 2 1.2

1991 3 1.3

1991 4 1.4

1992 1 2.1

1992 2 2.2

1992 3 2.3

1992 4 2.4

查成這樣一個(gè)結(jié)果

year m1 m2 m3 m4

1991 1.1 1.2 1.3 1.4

1992 2.1 2.2 2.3 2.4

答案、

select year,

(select amount from aaa m where month=1 and m.year=aaa.year) as m1,

(select amount from aaa m where month=2 and m.year=aaa.year) as m2,

(select amount from aaa m where month=3 and m.year=aaa.year) as m3,

(select amount from aaa m where month=4 and m.year=aaa.year) as m4

from aaa group by year

29、簡(jiǎn)述數(shù)據(jù)庫(kù)的讀寫(xiě)分離?

讀寫(xiě)分離為了確保數(shù)據(jù)庫(kù)產(chǎn)品的穩(wěn)數(shù)據(jù)定性,很多數(shù)據(jù)庫(kù)擁有雙機(jī)熱備功能。也就是,第一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,是對(duì)外提供增刪改業(yè)務(wù)的生產(chǎn)服務(wù)器;第二臺(tái)數(shù)據(jù)庫(kù)服務(wù)器,主要進(jìn)行讀的操作。

30、簡(jiǎn)述數(shù)據(jù)庫(kù)分庫(kù)分表?(水平、垂直)

垂直分庫(kù):就是按照功能的不同,把沒(méi)有關(guān)聯(lián)的數(shù)據(jù)放到不同的數(shù)據(jù)庫(kù)和服務(wù)器中

水平分表:根據(jù)一定的規(guī)則將一個(gè)表的數(shù)據(jù)劃分到不同的數(shù)據(jù)庫(kù)中,兩個(gè)數(shù)據(jù)庫(kù)的表結(jié)構(gòu)一樣。

寫(xiě)在最后

現(xiàn)在很多程序員們面試都是靠背面試題,這個(gè)只能適用于基礎(chǔ)面,如果想要去大廠的 話,一定要把鉆研深度,這樣才能在眾多面試者中脫穎而出。

隨著金九銀十的結(jié)束,也有很多粉絲私聊小編,說(shuō)自己拿到了大廠offer,同時(shí)小編再三 請(qǐng)求下才讓他們整理出了這份最新的互聯(lián)網(wǎng)大廠面經(jīng),

領(lǐng)取方式:點(diǎn)贊+收藏后,后臺(tái)私聊小編:即可免費(fèi)領(lǐng)取

最后祝大家升職加薪,給個(gè)點(diǎn)贊+收藏,我們下次再見(jiàn)!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容