我對REPEATABLE READ事務(wù)隔離級別的理解是,一旦設(shè)置好,事務(wù)中讀通的數(shù)據(jù)就不會改變。我已經(jīng)使用以下代碼來驗證這一點:ctx = context.Background()tx, _ := db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable}) time.Sleep(5 * time.Second)// do query on tx在進(jìn)程休眠時,我通過控制臺插入了另一條記錄。但是結(jié)果中出現(xiàn)了新插入的記錄。為什么會這樣?我不想讀取交易開始后插入的記錄。我也試過:tx, _ := db.Begin()_, err = tx.Exec(`set transaction isolation level repeatable read;`)但結(jié)果仍然是一樣的。
1 回答

繁星點點滴滴
TA貢獻(xiàn)1803條經(jīng)驗 獲得超3個贊
REPEATABLE READ
或事務(wù)的快照SERIALIZABLE
不是在事務(wù)啟動時拍攝的,而是在事務(wù)內(nèi)部運行第一條SQL語句時拍攝的。
首先,這是針對事務(wù)根本不運行任何語句的情況的優(yōu)化。其次,這是允許在事務(wù)開始之后設(shè)置事務(wù)隔離級別的唯一方法,但在運行任何 SQL 語句之前
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
- 1 回答
- 0 關(guān)注
- 159 瀏覽
添加回答
舉報
0/150
提交
取消