數據庫複習要點

  • 數據庫併發會引起的問題有哪些?

  1. 丟失修改,AB都對數據修改,必然有一個會覆蓋了另一個對數據的修改。
  2. 讀髒數據,即A修改了數據後,B讀入了該修改後的數據,但是A由於某些原因,撤銷了對數據的修改,使得數據恢復了原值,結果就是B讀入的數據值與數據庫內的數據不一致
  3. 不能重複讀,A讀入數據口,B讀取並做了修改,A再讀時,發現前後兩次的值不同
  • 數據完整性有哪三個?如何實現?

  1. 實體( 行)完整性。實體完整性是對關係中的記錄唯一性,也就是主鍵的約束。準確地說,實體完整性是指關係中的主屬性值不能爲Null且不能有相同值。定義表中的所有行能唯一的標識,一般用主鍵,唯一索引 unique關鍵字,及identity屬性比如說我們的身份證號碼,可以唯一標識一個人.
  2. 域(列)完整性。域完整性是對數據表中字段屬性的約束,通常指數據的有效性,它包括字段的值域、字段的類型及字段的有效規則等約束,它是由確定關係結構時所定義的字段的屬性決定的。限制數據類型,缺省值,規則,約束,是否可以爲空,域完整性可以確保不會輸入無效的值.。
  3. 參照完整性。參照完整性是對關係數據庫中建立關聯關係的數據表間數據參照引用的約束,也就是對外鍵的約束。準確地說,參照完整性是指關係中的外鍵必須是另一個關係的主鍵有效值,或者是NULL。參考完整性維護表間數據的有效性,完整性,通常通過建立外部鍵聯繫另一表的主鍵實現,還可以用觸發器來維護參考完整性
  • 什麼是存儲過程?有哪些優缺點?

    • 存儲過程是一些預編譯的SQL語句。
    • 更加直白的理解:存儲過程可以說是一個記錄集,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然後再給這個代碼塊取一個名字,在用到這個功能的時候調用他就行了。
    • 存儲過程是一個預編譯的代碼塊,執行效率比較高
    • 一個存儲過程替代大量T_SQL語句 ,可以降低網絡通信量,提高通信速率
    • 可以一定程度上確保數據安全
  • 數據庫的優化

    • SQL語句優化
    • 索引優化
    • 數據庫結構優化
    • 硬件優化
  • 索引是什麼?有什麼作用以及優缺點?

    • 索引是對數據庫表中一或多個列的值進行排序的結構,是幫助MySQL高效獲取數據的數據結構
    • 你也可以這樣理解:索引就是加快檢索表中數據的方法。數據庫的索引類似於書籍的索引。在書籍中,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息。在數據庫中,索引也允許數據庫程序迅速地找到表中的數據,而不必掃描整個數據庫。
    • MySQL數據庫幾個基本的索引類型:普通索引、唯一索引、主鍵索引、全文索引
    • 索引的優點
      • 索引加快數據庫的檢索速度
      • 索引降低了插入、刪除、修改等維護任務的速度
      • 唯一索引可以確保每一行數據的唯一性
      • 通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的性能
      • 索引需要佔物理和數據空間
  • 什麼是事務?

    事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據一致性。

  • 事務的四大特性 如果一個數據庫聲稱支持事務的操作,那麼該數據庫必須要具備以下四個特性:

    1. 原子性(Atomicity)   原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇博客介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。

    2. 一致性(Consistency)    一致性是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。 拿轉賬來說,假設用戶A和用戶B兩者的錢加起來一共是5000,那麼不管A和B之間如何轉賬,轉幾次賬,事務結束後兩個用戶的錢相加起來應該還得是5000,這就是事務的一致性。

    3. 隔離性(Isolation)    隔離性是當多個用戶併發訪問數據庫時,比如操作同一張表時,數據庫爲每一個用戶開啓的事務,不能被其他事務的操作所幹擾,多個併發事務之間要相互隔離。 即要達到這麼一種效果:對於任意兩個併發的事務T1和T2,在事務T1看來,T2要麼在T1開始之前就已經結束,要麼在T1結束之後纔開始,這樣每個事務都感覺不到有其他事務在併發地執行。 關於事務的隔離性數據庫提供了多種隔離級別,稍後會介紹到。

    4. 持久性(Durability)    持久性是指一個事務一旦被提交了,那麼對數據庫中的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作。

    例如我們在使用JDBC操作數據庫時,在提交事務方法後,提示用戶事務操作完成,當我們程序執行完成直到看到提示後,就可以認定事務以及正確提交,即使這時候數據庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是數據庫因爲故障而沒有執行事務的重大錯誤。

  • 數據庫的樂觀鎖和悲觀鎖是什麼?

    數據庫管理系統(DBMS)中的併發控制的任務是確保在多個事務同時存取數據庫中同一數據時不破壞事務的隔離性和統一性以及數據庫的統一性。

    樂觀併發控制(樂觀鎖)和悲觀併發控制(悲觀鎖)是併發控制主要採用的技術手段。

    • 悲觀鎖:假定會發生併發衝突,屏蔽一切可能違反數據完整性的操作
    • 樂觀鎖:假設不會發生併發衝突,只在提交操作時檢查是否違反數據完整性。
  • 使用索引查詢一定能提高查詢的性能嗎?爲什麼

    通常,通過索引查詢數據比全表掃描要快.但是我們也必須注意到它的代價.

    索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味着每條記錄的INSERT,DELETE,UPDATE將爲此多付出4,5 次的磁盤I/O. 因爲索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況:

    • 基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%
    • 基於非唯一性索引的檢索
  • 簡單說一說drop、delete與truncate的區別

    SQL中的drop、delete、truncate都表示刪除,但是三者有一些差別

    • delete和truncate只刪除表的數據不刪除表的結構
    • 速度:一般來說: drop> truncate >delete
    • delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;
    • 如果有相應的trigger,執行的時候將被觸發. truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.
  • drop、delete與truncate分別在什麼場景之下使用?

    • 不再需要一張表的時候,用drop
    • 想刪除部分數據行時候,用delete,並且帶上where子句
    • 保留表而刪除所有數據的時候用truncate
  • 超鍵、候選鍵、主鍵、外鍵分別是什麼?

    • 超鍵:在關係中能唯一標識元組的屬性集稱爲關係模式的超鍵。一個屬性可以爲作爲一個超鍵,多個屬性組合在一起也可以作爲一個超鍵。超鍵包含候選鍵和主鍵。
    • 候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。
    • 主鍵:數據庫表中對儲存數據對象予以唯一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能爲空值(Null)。
    • 外鍵:在一個表中存在的另一個表的主鍵稱此表的外鍵。
  • 什麼是視圖?以及視圖的使用場景有哪些?

    • 視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。
    • 只暴露部分字段給訪問者,所以就建一個虛表,就是視圖。
    • 查詢的數據來源於不同的表,而查詢者希望以統一的方式查詢,這樣也可以建立一個視圖,把多個表查詢結果聯合起來,查詢者只需要直接從視圖中獲取數據,不必考慮數據來源於不同表所帶來的差異
  • 範式

    • 第一範式:數據庫表的每一項都是不可分割的原子數據項,不能是集合。比如班級信息表裏面不能有班級的學生。
    • 第二範式:在第一範式的基礎上,所有屬性完全依賴於主鍵,完全依賴就是不能取決於主鍵的一部分
    • 第三範式:在第二範式的基礎上,消除傳遞依賴,比如學生表裏有學生屬於的班級編號,但不能有班級的名稱,班級人數等班級信息,因爲班級信息可有由班級編號通過班級表推出來,有傳遞依賴
    • 第一範式->第二範式->第三範式 →→→數據冗餘越來越少,查詢越來越複雜

    ←←←有數據冗餘,但查詢簡單

分組查詢(avg max min)、複雜連接查詢、嵌套查詢、結果排序(逆序ansc)、

存儲過程是一些預編譯的SQL語句。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章