Java數(shù)據(jù)庫(kù)Q&A

數(shù)據(jù)庫(kù)分頁(yè)查詢

select選出來(lái)后用limit分頁(yè)查詢
優(yōu)化分頁(yè)
limit查巨額數(shù)據(jù)返回少量,使用索引覆蓋掃描,先壓縮數(shù)據(jù)量,使用order by,group by之類語(yǔ)句

聚合函數(shù)

COUNT(),AVG(),SUM(),MAX(),MIN()
ps.where約束聲明,不能用聚合函數(shù);having過(guò)濾聲明,可以用約束函數(shù)

表的連接

內(nèi)連接:返回兩張表滿足條件記錄
左外連接:左邊全部,右表滿足條件記錄
右外連接:右邊全部,左表滿足條件記錄
自然連接:符合條件的兩張表中的記錄

SQL行轉(zhuǎn)換為列

CASE...WHEN...THEN語(yǔ)句
eg:sum(case 'subject' when '語(yǔ)文' then score else 0 end) as '語(yǔ)文'
if()函數(shù)
eg:sum( if ( 'subject' = '語(yǔ)文', score, 0)) as '語(yǔ)文'

SQL注入理解

SQL注入的原理是在對(duì)server端發(fā)起的請(qǐng)求參數(shù)中植入SQL代碼,傳遞到server解析。server端執(zhí)行SQL操作時(shí),會(huì)拼接對(duì)應(yīng)參數(shù),也會(huì)拼接這些植入的SQL代碼,導(dǎo)致執(zhí)行一些預(yù)期外的操作
解決方式
嚴(yán)格的參數(shù)校驗(yàn),SQL預(yù)編譯

關(guān)聯(lián)更新

將兩個(gè)表關(guān)聯(lián)起來(lái)(join),一張表的部分?jǐn)?shù)據(jù)可以更新到另一張表內(nèi)

索引

MySQL索引理解
索引是一個(gè)單獨(dú)的,存儲(chǔ)在磁盤(pán)上的數(shù)據(jù)結(jié)構(gòu),包含對(duì)數(shù)據(jù)表里的所有記錄的引用指針。使用其可以快速找出某個(gè)或多個(gè)列中有一特定值的行,所有MySQL列類型都可以被索引。
優(yōu)勢(shì)
保證行數(shù)據(jù)唯一性;加快查詢速度;加速表表連接;縮短查詢時(shí)分組排序時(shí)間
缺點(diǎn)
創(chuàng)建維護(hù)索引費(fèi)時(shí)間,占磁盤(pán)空間;修改數(shù)據(jù)時(shí),索引也要跟著動(dòng)態(tài)維護(hù);
分類
普通索引(有重復(fù),空值),唯一索引UNIQUE INDEX(必須唯一,允許空值)
單列索引(1索引只有單個(gè)列,1表多個(gè)單列索引)
組合索引(多個(gè)字段組合上創(chuàng)建的索引)
全文索引(支持值的全文查找)
空間索引
創(chuàng)建保存MySQL索引
1.創(chuàng)建表的時(shí)候創(chuàng)建索引(定義主鍵,外鍵,唯一性約束的時(shí)候相當(dāng)于創(chuàng)建一個(gè)索引)
2.在已存在的表上創(chuàng)建索引alter table語(yǔ)句,createindex語(yǔ)句
alter table book add unique index UniqidIdx(bookId);
create unqiue index UniqidIdx On book(bookId)
判斷索引是否要添加
唯一性是數(shù)據(jù)本身特性時(shí);需要確保定義列的數(shù)據(jù)完整性的時(shí)候
需要頻繁進(jìn)行排序或分組,帶排序列有多個(gè),建立組合索引
索引實(shí)現(xiàn)原理
在MySQL中,索引是在存儲(chǔ)引擎層面實(shí)現(xiàn)的
......(B+樹(shù))
MySQL中Hash索引和B書(shū)索引區(qū)別
hash索引底層就是hash表,查找時(shí),一次hash函數(shù)就可以獲得對(duì)應(yīng)鍵值,之后回表查詢實(shí)際數(shù)據(jù);
B+樹(shù)底層實(shí)現(xiàn)是多路平衡查找樹(shù),從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)方可獲得所查鍵值
聚簇索引、非聚簇索引、聯(lián)合索引
聚簇索引:根據(jù)主鍵創(chuàng)建的一顆B+樹(shù)
非聚簇索引:根據(jù)索引鍵創(chuàng)建的一顆B+樹(shù)
聯(lián)合索引:對(duì)表上的多個(gè)列進(jìn)行索引,創(chuàng)建方式和單個(gè)索引創(chuàng)建方式一樣,但和單個(gè)索引相比有多個(gè)索引列

MySQL事務(wù)隔離級(jí)別

名詞解釋
臟讀:事務(wù)A可以讀到事務(wù)B為提交的數(shù)據(jù)(臟數(shù)據(jù))
不可重復(fù)讀:事務(wù)A先后兩次讀取同一數(shù)據(jù),兩次讀取結(jié)果不一致
幻讀:事務(wù)A按某條件先后2此查詢數(shù)據(jù)庫(kù),查詢結(jié)果條數(shù)不同
ps.MySQL數(shù)據(jù)庫(kù)不支持嵌套事務(wù)
四種隔離級(jí)別
讀未提交(read uncommitted):性能最好,根本不加鎖,也沒(méi)有隔離效果
讀提交(read committed):采用多版本并發(fā)控制方式
可重復(fù)讀(repeatable read):采用多版本并發(fā)控制方式
串行化(serializable):加共享鎖,可并發(fā)讀,不可寫(xiě)

2021-03-28_152702.jpg

實(shí)現(xiàn)可重復(fù)讀
數(shù)據(jù)庫(kù)中一行記錄實(shí)際上可能有多個(gè)版本,除了數(shù)據(jù)本身還有版本字段
可重復(fù)讀就是在事物開(kāi)始的時(shí)候生成一個(gè)當(dāng)前事物全局性的快照


明天面試,今天暫時(shí)寫(xiě)到這吧,嗚嗚嗚

最后編輯于
?著作權(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)容