为了账号安全,请及时绑定邮箱和手机立即绑定

Golang Postgres 可重复读取隔离级别不起作用

Golang Postgres 可重复读取隔离级别不起作用

Go
精慕HU 2023-06-19 17:10:06
我对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;


查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信