
【計】 unrepeatable read
在數據庫事務處理領域,"不可重複讀"(Non-repeatable Read)指同一事務内重複讀取相同數據時結果不一緻的現象。其核心特征和英文對照如下:
漢語釋義
當某個事務兩次讀取同一數據期間,另一并發事務修改了該數據并提交,導緻第一次與第二次讀取結果不一緻。
英文術語
Non-repeatable Read
(來源:IBM Documentation
時序條件
(來源:Oracle Database Concepts
與髒讀的區别
不可重複讀針對已提交數據的修改(對比"髒讀"讀取的是未提交數據)。
(來源:Microsoft SQL Server Transactions
通過提高事務隔離級别避免:
(來源:PostgreSQL Documentation
-- 事務A
BEGIN TRANSACTION;
SELECT balance FROM accounts WHERE id=1; -- 返回100
-- 事務B此時更新餘額并提交
SELECT balance FROM accounts WHERE id=1; -- 返回80(結果不可重複)
COMMIT;
(數據一緻性風險參考:MySQL InnoDB Locking
不可重複讀是數據庫事務中的一種數據不一緻現象,指在同一個事務内多次讀取同一數據時,由于其他事務的修改導緻結果不一緻。以下是具體解釋:
事務内不一緻性
事務A第一次讀取數據後,事務B對該數據進行了修改并提交。當事務A再次讀取時,發現數據内容已變化。
與髒讀的區别
不可重複讀針對的是其他事務已提交的修改,而髒讀是讀取未提交的數據。
SELECT ... FOR UPDATE
對數據加鎖,阻止其他事務修改。-- 事務A
BEGIN;
SELECT balance FROM account WHERE id=1; -- 結果為100元
-- 事務B執行并提交
UPDATE account SET balance=80 WHERE id=1;
COMMIT;
-- 事務A再次查詢
SELECT balance FROM account WHERE id=1; -- 結果為80元
COMMIT;
此時事務A的兩次查詢結果不同,即發生了不可重複讀。
不可重複讀與幻讀的區别:前者針對同一數據的修改(如數值變化),後者涉及新增或删除行導緻結果集變化(如查詢結果行數不同)。
八角茴香屬備用狀态波爾多混合液補撥款層流翼面存儲元件呆帳追回電爐對數放大器附屬單位預算高度衰減膈淋巴結工藝說明骨膜水腫後續保險人環草定茴香酰甘氨酸角膜薄翳節後神經元記錄屬性集注本立僞誓脈絡膜毛細管層慢性脊髓前角灰質炎名字索引諾品烷切牙孔擾勢史詩損失系數