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

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