撩课-Java每天5道面试题第12天
生活随笔
收集整理的這篇文章主要介紹了
撩课-Java每天5道面试题第12天
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
91.如何提升數據查詢的效率?
1.首先檢查表的結構是否合理, 因為采用多表查詢的時候, 看主外鍵的引用關系是否適當. 如果不適當則重新設置表結構. 如果是應用中的系統, 則不需要更改表的字段, 只更改主外鍵關系. 如果數據庫中有較多的數據, 還應采用索引提高查詢效率.2.利用索引(index) 對查詢進行優化, index可以避免對表數據的全面掃描, 當你以某個字段建立一個索引的時候, 數據庫就會生成一個索引頁, 索引頁不單單保存索引的數據, 還保存了索引在數據庫的 具體的物理地址, 能夠很快的定位查找到要找的記錄3. 如果表的列很少, 不適合建索引. 表數據很少查詢, 而經常做insert、delete、update動作, 不適合建所以。 因為Oracle需要對索引額外維護。 建立索引后,select會快, 當執行過多次的insert,delete,update后, 會出現索引碎片, 影響查詢速度,我 們應該對索引進行重組 (即drop掉索引重新create)4.索引的類型分為:B-樹索引: 適合于大量的增、刪、改, 大多數數據的索引默認類型。位圖索引: 適合于決策支持系統HASH索引、分區索引等。?
92.什么是數據庫事務?
事務是作為一個邏輯單元 執行的一系列操作, 要么一起成功,要么一起失敗。一個邏輯工作單元必須有四個屬性, 稱為 ACID: 原子性、 一致性、 隔離性 持久性 屬性, 只有這樣才能成為一個事務。原子性 : 事務必須是原子工作單元; 對于其數據修改, 要么全都執行 ,要么全都不執行。一致性 : 事務在完成時, 必須使所有的數據都保持一致狀態。 在相關數據庫中, 所有規則都必須應用于事務的修改, 保持所有數據的完整性。 事務結束時, 所有的內部數據結構 (如 B 樹索引或雙向鏈表) 都必須是正確的。隔離性 : 由并發事務所作的修改 必須與任何其它并發事務 所作的修改隔離。 事務查看數據時數據所處的狀態, 要么另一并發事務修改它之前的狀態, 要么是另一事務修改它之后的狀態, 事務不會查看中間狀態的數據。 這為可串行性, 因為它能夠重新裝載起始數據, 并且重播一系列事務, 以使數據結束時的狀態 與原始事務執的狀態相同。持久性 : 事務完成之后, 它對于系統的影響是永久性的。 該修改即使出現系統故障也將一直保持。?
93.什么是數據庫事務的隔離級別?
多個線程開啟各自事務操作數據庫中數據時,數 據庫系統要負責隔離操作, 以保證各個線程在獲取數據時的準確性。數據庫共定義了四種隔離級別: Serializable:(串行化) 可避免臟讀、 不可重復讀、 虛讀情況的發生Repeatable read:(可重復讀)可避免臟讀、 不可重復讀情況的發生。Read committed:(讀已提交) 可避免臟讀情況發生。Read uncommitted:(讀未提交) 最低級別, 以上情況均無法保證。94.如何刪除表中的重復數據,只保留一條記錄?
1、查找表中多余的重復記錄, 重復記錄是根據單個字段(peopleId)來判斷 select * from people where peopleId in ( select peopleId from people group by peopleId having count(peopleId) > 1 ) 2、刪除表中多余的重復記錄, 重復記錄是根據單個字段(peopleId)來判斷, 只留有rowid最小的記錄 delete from people where peopleName in ( select peopleName from people group by peopleName having count(peopleName) > 1 ) and peopleId not in ( select min(peopleId) from people group by peopleName having count(peopleName)>1 ) 3、查找表中多余的重復記錄(多個字段) select * from vitae a where (a.peopleId,a.seq) in ( select peopleId,seq from vitae group by peopleId,seq having count(*) > 1 ) 4、刪除表中多余的重復記錄(多個字段),只留有rowid最小的記錄 delete from vitae a where (a.peopleId,a.seq) in ( select peopleId,seq from vitae group by peopleId,seq having count(*) > 1 ) and rowid not in ( select min(rowid) from vitae
group by peopleId,seq having count(*)>1 ) 5、查找表中多余的重復記錄(多個字段),不包含rowid最小的記錄 select * from vitae a where (a.peopleId,a.seq) in ( select peopleId,seq from vitae group by peopleId, seq having count(*) > 1 ) and rowid not in ( select min(rowid) from vitae
group by peopleId, seq having count(*)>1 ) 6.消除一個字段的左邊的第一位: update tableName set [Title]=Right([Title],(len([Title])-1)) where Title like '村%' 7.消除一個字段的右邊的第一位: update tableName set [Title]=left([Title],(len([Title])-1)) where Title like '%村' 8.假刪除表中多余的重復記錄(多個字段), 不包含rowid最小的記錄 update vitae set ispass=-1 where peopleId in ( select peopleId from vitae group by peopleId )
95.如何通過sql語句完成分頁?
客戶端通過傳遞start(頁碼), PageSize(每頁顯示的條數)兩個參數 去分頁查詢數據庫表中的數據, 那我們知道MySql數據庫提供了 分頁的函數limit m,n, 但是該函數的用法和我們的需求不一樣, 所以就需要我們根據實際情況 去改寫適合我們自己的分頁語句, 具體的分析如下:比如: 查詢第1條到第10條的數據的sql是: select * from table limit 0,10; 對應我們的需求就是查詢第一頁的數據: select * from table limit (1-1)*10,10;查詢第10條到第20條的數據的sql是: select * from table limit 10,20; 對應我們的需求就是查詢第二頁的數據: select * from table limit (2-1)*10,10;查詢第20條到第30條的數據的sql是: select * from table limit 20,30; 對應我們的需求就是查詢第三頁的數據: select * from table limit (3-1)*10,10;二:通過上面的分析, 可以得出符合我們自己需求的分頁 sql格式是: select * from table limit (start-1)*PageSize,PageSize; 其中start是頁碼, PageSize是每頁顯示的條數。
轉載于:https://www.cnblogs.com/gxq666/p/10018536.html
總結
以上是生活随笔為你收集整理的撩课-Java每天5道面试题第12天的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: window - JDK的安装与卸载
- 下一篇: Docker(2):使用Dockerfi