隔離層級

PostgreSQL 的交易與錯誤處理

Jason Myers

Instructor

並行處理

  • 同步協調多個操作。
  • 在資料庫中會引發一組特有問題。
  • 以稱為隔離層級的規則來簡化結果推論。
PostgreSQL 的交易與錯誤處理

髒讀(Dirty Read)

Dirty Read

PostgreSQL 的交易與錯誤處理

不可重複讀(Nonrepeatable Read)

Nonrepeatable Read

PostgreSQL 的交易與錯誤處理

幻讀(Phantom Read)

Phantom Read

PostgreSQL 的交易與錯誤處理

序列化異常(Serialization Anomaly)

Serialization Anomaly

PostgreSQL 的交易與錯誤處理

隔離層級

隔離層級 髒讀 不可重複讀 幻讀 序列化異常
Read Uncommitted 受保護(PostgreSQL) 易受影響 易受影響 易受影響
Read Committed 受保護 易受影響 易受影響 易受影響
Repeatable Read 受保護 受保護 受保護(PostgreSQL) 易受影響
Serializable 受保護 受保護 受保護 受保護
PostgreSQL 的交易與錯誤處理

隔離層級的影響

START TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 
SELECT COUNT(*) FROM cookies WHERE name = 'lemon drop';

-- Cookie 6 has been added in an external transaction.

SELECT COUNT(*) FROM cookies WHERE name = 'lemon drop';
COMMIT;

陳述結果

  • 第一次 SELECT 結果:5
  • 第二次 SELECT 結果:6
PostgreSQL 的交易與錯誤處理

隔離層級的影響

START TRANSACTION ISOLATION LEVEL SERIALIZABLE; 
SELECT COUNT(*) FROM cookies WHERE name = 'lemon drop';

-- Cookie 6 has been added in an external transaction.

SELECT COUNT(*) FROM cookies WHERE name = 'lemon drop';
COMMIT;

陳述結果

  • 第一次 SELECT 結果:5
  • 第二次 SELECT 結果:5
PostgreSQL 的交易與錯誤處理

一起來練習吧!

PostgreSQL 的交易與錯誤處理

Preparing Video For Download...