选择和更新SQL表(一次点击)

时间:2012-09-06 14:31:19

标签: mysql sql database

我一直想知道如何从数据库中选择多行,并且他们的一列或多列都是即时更新的。让我们以搜索引擎为例,其中抓取了数千个结果并更新了视图计数(使用单个查询)。

这可能吗?他们是否使用特殊的SQL功能来实现这一目标?

P.S。:如果之前已经问过这个问题请转介我,因为我没有找到相同的问题,如果它是蹩脚的,我知道。

3 个答案:

答案 0 :(得分:2)

例如,如果您考虑Google如何做到这一点,他们会使用 Bigtable (请参阅this question进行讨论)我对内部的工作方式一无所知,所以可以'评论。

至于你的问题,不可能一次性使用selectupdate - 纯SQL,即。但是,可以使用存储的功能来执行此操作。考虑以下函数(伪代码)

create function select_and_update(criteria) returns setof data_rows
  as
begin
    update some_table set view_count = view_count + 1 where criteria;
    return set "select * from some_table where criteria";
end;

然后在应用程序中,您可以进行一次数据库调用:

SELECT * FROM select_and_update(criteria)

这样,应用程序中只有一个“命中”(即您只是针对数据库连接从应用程序执行一个查询),但是内部视图计数会更新并返回数据。

具体而言,具体取决于数据库引擎和您的特定需求,但我确实在我的网站上广泛使用了这种技术。

答案 1 :(得分:1)

假设数据存储在关系数据库中,答案是检索不是通过单个选择。我可以想到两种方法。

TYhe首先通过存储过程或表值用户定义函数进行检索。代码将获取结果并执行更新,然后返回结果。

或者,检索可以使用游标。一种类型的游标是可更新的游标,它允许调用者在一次调用中读取和更新数据。可更新游标通常很慢,所以它们使用不多。

答案 2 :(得分:0)

如果我理解你的问题,为什么不join这两个表?像这样的东西,

UPDATE table1 t1 
        INNER JOIN 
        (
            SELECT id, count(*) totalCount
            FROM tableName
            GROUP BY id
        ) t2 
            ON t1.id = t2.id
SET t1.col1 = t2.totalCount