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