数据库查询某一列大写转化小写字母表示_算法/开发 面试必看! 【数据库】面试题合集...
本合集整理了計(jì)算機(jī)專業(yè)相關(guān)算法/開發(fā)面試中遇到的【數(shù)據(jù)庫】相關(guān)面試題,后續(xù)會不斷更新,有需要的小伙伴可以點(diǎn)贊or收藏隨時查閱哦!
Q:數(shù)據(jù)庫四大特性ACID?
- Atomicity(原子性):一個事務(wù)(transaction)中的所有操作,或者全部完成,或者全部不完成,不會結(jié)束在中間某個環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯誤,會被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個事務(wù)從來沒有執(zhí)行過一樣。即,事務(wù)不可分割、不可約簡。
- Consistency(一致性):在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)約束、觸發(fā)器、級聯(lián)回滾等。
- Isolation(隔離性):數(shù)據(jù)庫允許多個并發(fā)事務(wù)同時對其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級別,包括未提交讀(Read uncommitted)、提交讀(read committed)、可重復(fù)讀(repeatable read)和串行化(Serializable)。
- Durability(持久性):事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失。
Q:數(shù)據(jù)庫三范式?
第一范式(確保每列保持原子性)
第一范式是最基本的范式。如果數(shù)據(jù)庫表中的所有字段值都是不可分解的原子值
第二范式(確保表中的每列都和主鍵相關(guān))
第二范式在第一范式的基礎(chǔ)之上更進(jìn)一層。第二范式需要確保數(shù)據(jù)庫表中的每一列都和主鍵相關(guān),而不能只與主鍵的某一部分相關(guān)(主要針對聯(lián)合主鍵而言)。也就是說在一個數(shù)據(jù)庫表中,一個表中只能保存一種數(shù)據(jù),不可以把多種數(shù)據(jù)保存在同一張數(shù)據(jù)庫表中。
第三范式(確保每列都和主鍵列直接相關(guān),而不是間接相關(guān))
第三范式需要確保數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。
比如在設(shè)計(jì)一個訂單數(shù)據(jù)表的時候,可以將客戶編號作為一個外鍵和訂單表建立相應(yīng)的關(guān)系。而不可以在訂單表中添加關(guān)于客戶其它信息(比如姓名、所屬公司等)的字段。如下面這兩個表所示的設(shè)計(jì)就是一個滿足第三范式的數(shù)據(jù)庫表。
Q:數(shù)據(jù)庫索引?
索引的優(yōu)點(diǎn)?
- 通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
- 可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。
- 可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
- 在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。
- 通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能
索引的缺點(diǎn)?
- 創(chuàng)建索引和維護(hù)索引要耗費(fèi)時間,這種時間隨著數(shù)據(jù)量的增加而增加。
- 索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
- 當(dāng)對表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時候,索引也要動態(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。
建索引的幾大原則?
應(yīng)該建立索引的情況?
- 在經(jīng)常需要搜索的列上,可以加快搜索的速度;
- 在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);
- 在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
- 在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的;
- 在經(jīng)常需要排序的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
- 在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。
不應(yīng)該建立索引的情況?
- 對于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引。這是因?yàn)?#xff0c;既然這些列很少使用到,因此有索引或者無索引,并不能提高查詢速度。相反,由于增加了索引,反而降低了系統(tǒng)的維護(hù)速度和增大了空間需求。
- 對于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。這是因?yàn)?#xff0c;由于這些列的取值很少,例如人事表的性別列,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,即需要在表中搜索的數(shù)據(jù)行的比例很大。增加索引,并不能明顯加快檢索速度。
- 對于那些定義為text, image和bit數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因?yàn)?#xff0c;這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少。
- 當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時,不應(yīng)該創(chuàng)建索引。這是因?yàn)?#xff0c;修改性能和檢索性能是互相矛盾的。當(dāng)增加索引時,會提高檢索性能,但是會降低修改性能。當(dāng)減少索引時,會提高修改性能,降低檢索性能。因此,當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時,不應(yīng)該創(chuàng)建索引。
插入索引的sql語句?
CREATE多重的索引
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);1.添加PRIMARY KEY(主鍵索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )2.添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` )3.添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )Q:數(shù)據(jù)庫查詢優(yōu)化?
Q:什么是幻讀 ?
幻讀是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時發(fā)生的一種現(xiàn)象。例如第一個事務(wù)對一個表中的數(shù)據(jù)進(jìn)行了修改,比如這種修改涉及到表中的“全部數(shù)據(jù)行”。同時,第二個事務(wù)也修改這個表中的數(shù)據(jù),這種修改是向表中插入“一行新數(shù)據(jù)”。那么,以后就會發(fā)生操作第一個事務(wù)的用戶發(fā)現(xiàn)表中還存在沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。
一般解決幻讀的方法是增加范圍鎖RangeS,鎖定檢索范圍為只讀,這樣就避免了幻讀。
Q:臟讀、幻讀、不可重復(fù)讀?
- 臟讀:一個事務(wù)還未提交,另外一個事務(wù)訪問此事務(wù)修改的數(shù)據(jù),并使用,讀取了事務(wù)中間狀態(tài)數(shù)據(jù)。
- 幻讀:一個事務(wù)讀取2次,得到的記錄條數(shù)不一致,由于2次讀取之間另外一個事務(wù)對數(shù)據(jù)進(jìn)行了增刪。
- 不可重復(fù)讀:一個事務(wù)讀取同一條記錄2次,得到的結(jié)果不一致,由于在2次讀取之間另外一個事務(wù)對此行數(shù)據(jù)進(jìn)行了修改。
- 不可重復(fù)讀和幻讀的區(qū)別: 簡單來說,不可重復(fù)讀是由于數(shù)據(jù)修改引起的,幻讀是由數(shù)據(jù)插入或者刪除引起的。
Q:數(shù)據(jù)庫主鍵與索引的區(qū)別?
1:主鍵是為了標(biāo)識數(shù)據(jù)庫記錄唯一性,不允許記錄重復(fù),且鍵值不能為空,主鍵也是一個特殊索引;
2:數(shù)據(jù)表中只允許有一個主鍵,但是可以有多個索引;
3.使用主鍵會數(shù)據(jù)庫會自動創(chuàng)建主索引,也可以在非主鍵上創(chuàng)建索引,方便查詢效率;
4:索引可以提高查詢速度,它就相當(dāng)于字典的目錄,可以通過它很快查詢到想要的結(jié)果,而不需要進(jìn)行全表掃描;
5:主鍵索引外索引的值可以為空;
6:主鍵也可以由多個字段組成,組成復(fù)合主鍵,同時主鍵肯定也是唯一索引;
7:唯一索引則表示該索引值唯一,可以由一個或幾個字段組成,一個表可以有多個唯一索引。
Q:回表查詢?
先索引掃描,再通過ID去取索引中未能提供的數(shù)據(jù),即為回表。
Q:隔離級別?
SERIALIZABLE(串行化)
當(dāng)數(shù)據(jù)庫系統(tǒng)使用SERIALIZABLE隔離級別時,一個事務(wù)在執(zhí)行過程中完全看不到其他事務(wù)對數(shù)據(jù)庫所做的更新。當(dāng)兩個事務(wù)同時操作數(shù)據(jù)庫中相同數(shù)據(jù)時,如果第一個事務(wù)已經(jīng)在訪問該數(shù)據(jù),第二個事務(wù)只能停下來等待,必須等到第一個事務(wù)結(jié)束后才能恢復(fù)運(yùn)行。因此這兩個事務(wù)實(shí)際上是串行化方式運(yùn)行。
REPEATABLE READ(可重復(fù)讀)
當(dāng)數(shù)據(jù)庫系統(tǒng)使用REPEATABLE READ隔離級別時,一個事務(wù)在執(zhí)行過程中可以看到其他事務(wù)已經(jīng)提交的新插入的記錄,但是不能看到其他事務(wù)對已有記錄的更新。
READ COMMITTED(讀已提交數(shù)據(jù))
當(dāng)數(shù)據(jù)庫系統(tǒng)使用READ COMMITTED隔離級別時,一個事務(wù)在執(zhí)行過程中可以看到其他事務(wù)已經(jīng)提交的新插入的記錄,而且還能看到其他事務(wù)已經(jīng)提交的對已有記錄的更新。
READ UNCOMMITTED(讀未提交數(shù)據(jù))
當(dāng)數(shù)據(jù)庫系統(tǒng)使用READ UNCOMMITTED隔離級別時,一個事務(wù)在執(zhí)行過程中可以看到其他事務(wù)沒有提交的新插入的記錄,而且還能看到其他事務(wù)沒有提交的對已有記錄的更新。
以上的四種隔離級別按從高到底排序,你可能會說,選擇SERIALIZABLE,因?yàn)樗畎踩?#xff01;沒錯,它是最安全,但它也是最慢的!四種隔離級別的安全性與性能成反比!最安全的性能最差,最不安全的性能最好!
后續(xù)遇到新的面試題還會持續(xù)更新,感興趣的朋友可以繼續(xù)關(guān)注哦~ 歡迎點(diǎn)贊收藏評論互動~
注:本文答案多數(shù)來自網(wǎng)絡(luò),不一一標(biāo)注引用。總結(jié)
以上是生活随笔為你收集整理的数据库查询某一列大写转化小写字母表示_算法/开发 面试必看! 【数据库】面试题合集...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速排序算法_基于位运算的快速排序算法
- 下一篇: 学电脑从新手到高手_小白如何学手绘插画?