银行面试之MySQL数据库
生活随笔
收集整理的這篇文章主要介紹了
银行面试之MySQL数据库
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
銀行面試之MySQL數據庫
- 存儲引擎(InnoDB Vs MyISAM)
- 約束
- char Vs varchar
- in Vs exists
- delete Vs truncate Vs drop
- 存儲過程 Vs 觸發器
- 視圖
存儲引擎(InnoDB Vs MyISAM)
| 支持事務 | 不支持事務 |
| 支持外鍵 | 不支持外鍵 |
| 支持表級鎖和行級鎖 | 只支持表級鎖 |
| 支持壓縮表和空間數據索引 | |
| 聚集索引,數據文件和索引綁在一起,必須要有主鍵 | 非聚集索引,數據和索引分離,索引保存的是數據的指針 |
| 不保存表的具體行數 | 用一個變量保存了表的行數 |
約束
| 非空約束(Not NULL) | 內容不能為NULL |
| 唯一約束(Unique) | 內容不能重復,一個表允許有多個唯一約束 |
| 主鍵約束(Primary) | 能唯一且完整標識數據對象的屬性及其組合,一個表中只能有一個主鍵 |
| 外鍵約束(Foreign) | 一個表中存在另一個表的主鍵即為此表的外鍵,防止破壞表之間連接的動作 |
| 檢查約束(Check) | 控制字段的值的范圍 |
char Vs varchar
| 定長字段,如果插入的長度小于定義長度時,則用空格填充 | 變長字段,小于定義長度時,還是按實際長度存儲 |
| 存儲速度快,空間換時間 | 節省存儲空間,時間換空間 |
in Vs exists
| 在查詢的時候,首先查詢子查詢的表,然后將內表和外表做一個笛卡爾積,然后按照條件進行篩選。所以相對內表比較小的時候,in的速度較快。 | 遍歷循環外表,然后看外表中的記錄有沒有和內表的數據一樣的。匹配上就將結果放入結果集中。適合內表比較大的時候 |
如果查詢語句使用了not in 那么內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。
delete Vs truncate Vs drop
| 刪除一行數據 | 刪除所有的數據 | 刪除整個表的數據+結構 |
| 可回滾 | 不可回滾 | 不可回滾 |
| 不會減少表或索引所占用的空間 | 表和索引所占用的空間會恢復到初始大小 | 將表所占用的空間全釋放掉 |
| DML | DDL | DDL |
| 每次刪除一行,就在事務日志中添加一項記錄 | 通過釋放存儲表數據所用的數據頁來刪除數據,并且只在事務日志中記錄頁的釋放,因此刪除速度快于delete | 刪除速度最快 |
存儲過程 Vs 觸發器
| 存儲過程 (Stored Procedure) 是一組為了完成特定功能的 SQL 語句集 , 存儲在數據庫中 , 經過第一次編譯后再次調用時不需要重新編譯 , 用戶通過指定存儲過程的名字并給出參數 (如果該存儲過程帶有參數) 來執行它 ; | 觸發器是一種特殊類型的存儲過程。觸發器主要是通過事件進行觸發而被執行 |
存儲過程的優點
1、存儲過程比單個SQL語句的運行速度更快
2、在調用時只需要提供存儲過程名和參數,可以在一定程度上降低網絡負擔
3、代碼精簡一致,可維護性高
4、可以一定程度增強安全性,可防止SQL注入攻擊
存儲過程的缺點
1、可移植性差
2、如果需要對參數或返回進行更改的話較為復雜
視圖
視圖是一種虛擬的表,視圖本身并不包含任何數據,它只包含映射到基表的一個查詢語句,當基表數據發生變化,視圖數據也隨之變化。
總結
以上是生活随笔為你收集整理的银行面试之MySQL数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++奇偶数判断
- 下一篇: 达梦数据库报网络通讯异常排查步骤