当前位置: 首页 > 面试题库 >

SQL选择和更新的正确方法

孙俊彦
2023-03-14
问题内容

我在对Postgres数据库使用github.com/bmizerany/pq。我需要选择“
todos”表中的所有行,并为每一行检查条件并相应地更新行。伪代码:

rows, _ := dbConn.Query("SELECT id, condition, task FROM todos")

for rows.Next() {
    var Id int
    var Condition int
    var Task string
    rows.Scan(&Id, &Condition, &Task)
    if Condition == 0 {
           UpdateTask(Id, Task)
    }
}

UpdateTask()函数将发出一条SQL更新语句来更新该行。

在SELECT查询中发出SQL更新是否会锁定数据库?这是进行这种更新的正确方法吗?


问题答案:

首先, 至少 您应该这样做,以SELECT ... FOR UPDATE防止其他SELECT ... FOR [SHARE|UPDATE]访问锁定行。您必须在事务内执行此操作并保持该事务,直到更新最后一行和commit

SELECT ... FOR UPDATE 锁定普通行的行SELECT;他们仍然可以读取未使用FOR UPDATE或的其他交易FOR SHARE

更好的是,尝试将整个事情重新表述为一个UPDATE ... FROM或其他基于html" target="_blank">集合的操作,在此操作中您可以在单个查询中完成所有工作。通常,它的性能要好于SELECT ... FOR UPDATE随后的UPDATEs 流。



 类似资料:
  • 我的GUI显示了我的停车场中的车辆,以及我想在两个不同的VehicleTable(扩展JTable的类)中设置可用的车辆。对于可用的车辆,我希望可以通过代理(第三方软件)观察这些车辆。这两个表都显示了行中车辆的描述…为此,我创建了VehicleTableModel和Vehicle类。Vehicle类是一个抽象类,其子类是:Car、Truck、Trailer等。 我的问题是:在我当前的实现中,我认为

  • 我是在windows环境和使用maven编译我的项目。虽然我刚刚创建了项目并添加了各个Libaries的依赖项。 当我添加它们时,maven开始抱怨缺少,所以我在中添加了以下内容: 当我运行maven安装时,我得到了一个丢失的jar的错误,如下所示: 问题是在“”中,并且在环境变量中正确设置,但是maven仍然在jre文件夹中查找,错误消息为“”。 有趣的是:当我在dependency中设置完整路

  • 为了优化存储,在任何情况下均应使用最精确的类型。例如,如果列的值的范围为从1到99999,若使用整数,则MEDIUMINT UNSIGNED是好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。 用精度为65位十进制数(基于10)对DECIMAL列进行所有基本计算(+、-、*、/)。参见11.1.1节,“数值类型概述”。 使用双精度操作对DECIMAL值进行计算。如果准确度不是太重要或如

  • 校验者: 翻译者: @李孟禹 通常,解决机器学习问题的最困难的部分可能是找到恰当的的评估器(estimator)。 不同的评估器更适合不同类型的数据和不同的问题。 下面的流程图是一些粗略的指导,可以让用户根据自己的数据来选择应该尝试哪些评估器。 点击下图的任何评估器,查看其文档。

  • 在更新rest api时,我考虑了两种方法,但我不确定该如何选择哪种方法 例如: 甚至 而且 所以我的问题是,在选择如何更新REST的方法时,遵循的经验法则是什么?

  • 问题内容: 我是redux和es6语法的新手。我使用官方的redux教程和此示例制作了我的应用。 以下是JS代码段。我的观点-在post reducer中定义REQUEST_POST_BODY和RECEIVE_POST_BODY案例。主要困难- 在商店中查找和更新合适的对象。 我尝试使用示例中的代码: 但是它使用了简单的帖子数组。无需按ID查找正确的帖子。 这是我的代码: 问题答案: 如果您想坚持