gpt4 book ai didi

go - 我如何在 GORM(Golang) 中进行表锁定?

转载 作者:行者123 更新时间:2023-12-05 03:25:01 25 4
gpt4 key购买 nike

如何在 GORM(go-gorm) 中进行表锁定?

我找到了一种方法来做 row locking , 但找不到进行表锁定的方法。

最佳答案

您可以根据 gorm.io 使用此代码文档:

行级锁定模式,用于更新

db.Clauses(clause.Locking{Strength: "UPDATE"}).Find(&users)
// SELECT * FROM `users` FOR UPDATE

此外,您可以使用其他锁定模式而不是 UPDATE,例如:KEY SHARE、SHARE、NO KEY UPDATE。

表级锁定模式

对于锁定表,据我所知,Gorm 目前没有选项,因为 Gorm 在合并子句时总是使用 FOR。但您可以使用原始查询来实现您想要的:

db.Exec("LOCK TABLE table_name_here IN ACCESS EXCLUSIVE MODE")

// LOCK [ TABLE ] [ ONLY ] name [ * ] [, ...] [ IN lockmode MODE ] [ NOWAIT ]

其中锁定模式是以下之一:

ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE
| SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE

有关 Postgres 锁的更多信息 here

添加选项

您可以使用Options 添加您想要的任何选项,这将出现在 Strength 之后。

db.Clauses(clause.Locking{
Strength: "UPDATE",
Options: "NOWAIT",
}).Find(&users)
// SELECT * FROM `users` FOR UPDATE NOWAIT

关于go - 我如何在 GORM(Golang) 中进行表锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72142999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com