Postgresql
Postgres:帶有事務的顯式鎖定
我是 SQL 世界的初學者,對事務/鎖定有一些疑問:
- 在 postgres 中,事務是否還確保在完成之前鎖定行(首選)/表?
- 另外,如果有兩個事務通過不同的查詢,第二個事務會等待第一個事務完成,即它是串列的還是並發的?
我認為這兩點都推斷相同,但我不確定是否會同時發布兩者。
在 postgres 中,事務是否還確保在完成之前鎖定行(首選)/表?
不,事務不能確保鎖定。事務只確保任何事務都是原子完成的。也就是說,要麼全部成功,要麼全部失敗。它如何做它做什麼,它做什麼,完全由你控制。
例如,PostgreSQL 目前支持三種隔離級別,
- 讀已送出
- 可重複讀取
- 可序列化
這三個隔離級別要麼看到和操作可以直接看到數據,要麼是事務開始時的數據快照。
只有在最後一種模式下可序列化,才會嘗試以序列化方式送出事務。是否進行了足夠的嘗試是另一個問題。
PostgreSQL 中的所有鎖定都可以顯式或隱式完成(DDL 命令知道如何有效地鎖定以完成工作)。通常,避免顯式鎖。但在同樣的情況下,包括在可序列化的情況下,這是確保自事務開始以來沒有添加數據的唯一方法。