1. 程式人生 > >數據庫學習筆記(一)

數據庫學習筆記(一)

cit action 提升性能 修改 事務 做的 nco 失敗 align

一、關系數據庫

關系數據庫,也就是以關系為核心來組織數據的數據庫。它的理念是把數據盡可能拆分成多個二維表格,不同的表之間通過某種關系來連接起來。這樣的好處有:

  1. 如果數據的某一部分需要變動,只需要變動該數據所處的表就行,而不需要重新設計整個數據庫。(前提是最開始就把關系模型設計得足夠好。。)
  2. 可以進行復雜的 SQL 查詢
  3. 保證事務的一致性

事務的 ACID 特性

關系數據庫保證事務滿足以下四個特性:

  1. 原子性(Atomicity):整個事務中的所有操作,要麽全部完成,要麽全部不完成,不存在只有一部分完成的情況。如果事務在執行過程中觸發了異常,整個事務都會失敗並中止,數據庫不會被改變。(因為沒有 COMMIT
    • 註意事務失敗並不會自動ROLLBACK需要手動檢測 SQLEXCEPTION,然後將事務 ROLLBACK 到某個 SAVEPOINT 或者直接 ROLLBACK 整個事務
    • 一句話總結,就是記錄 DB 之前的版本,允許回滾
  2. 持久性(Durability):一旦事務成功執行,它所作的更改就會一直存在於數據庫中,不會丟失。(實際上持久性有很多的級別,保證數據絕對不丟失的方法並不存在)
  3. 隔離性(Isolation):在並發事務下,各事務相互獨立互不幹擾。(或者說一個事務所做的修改在最終提交以前,該修改對其他事務不可見)
    • 隔離性是為了避免並發事務的線程安全問題引入的
    • 為了平衡性能與隔離性,定義了以下四個隔離級別(可以說是適當的破壞一致性來提升性能與並行度
      ):
      • Read Uncommitted
      • Read Committed
      • Repeatable Read
      • Serializable(所有的事務操作都必須串行操作,完全隔離)
Isolation level Dirty reads Non-repeatable reads Phantoms(幻讀)
Read Uncommitted may occur
may occur may occur
Read Committed don‘t occur may occur may occur
Repeatable Read don‘t occur don‘t occur may occur
Serializable don‘t occur don‘t occur don‘t occur
  1. 一致性(Consistency):如果事務是並發多個,其外在表現也必須與串行事務一致。也就是說事務開始和結束之間的中間狀態不會被其他事務看到。

AID 是手段,C 是目的。

MySQL 的 innoDB 引擎默認的隔離級別為 Repeatable Read,而 SQL Server、PostgrelSQL、Oracle 都以 Read Committed 為默認隔離級別。隔離級別可手動修改。

參考

  • 『淺入深出』MySQL 中事務的實現

數據庫學習筆記(一)