【发布时间】:2020-10-18 02:23:52
【问题描述】:
我们可以稍后创建数据库事务并提交/回滚吗?我的意思是我们不在同一台机器/主机/服务器上提交/回滚。假设我们返回事务并让其他人根据事务 ID 决定提交或回滚。我们在 Go 和 sql 库中是怎么做的?
【问题讨论】:
标签: sql database go transactions
我们可以稍后创建数据库事务并提交/回滚吗?我的意思是我们不在同一台机器/主机/服务器上提交/回滚。假设我们返回事务并让其他人根据事务 ID 决定提交或回滚。我们在 Go 和 sql 库中是怎么做的?
【问题讨论】:
标签: sql database go transactions
没有。
事务允许以原子方式执行一系列命令,例如,无需另一个命令获取一半更新的数据,也无需另一个命令更改该系列命令中的基础数据。
这是您希望尽快结束并完成的事情,因为它们会锁定基础表。
想象一下,如果您的事务要在表 A 中插入一行。您启动事务,插入行,然后不提交或回滚。在您这样做之前,没有其他人可以使用表 A(除非在特殊情况下)。他们会坐在那里等待(阻塞)。如果并发事务试图以不同的顺序将数据放入表中,您也可能会遇到死锁 - 其中事务会自动回滚而无需用户输入。
Brent Ozar explaining and showing deadlocks 有一个很棒的视频 - 值得单独观看,但也演示了如果您不提交交易会发生什么。
如果您想要一个排队或批准更改的机制,您需要先构建它,例如,
tl;dr 版本:数据库中的事务是一种数据级功能,可确保您的数据保持一致。使用approval/etc是在业务逻辑级别。
【讨论】: