0

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

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

PS:如果之前有人问过这个问题,请参考我,因为我没有找到相同的问题,如果它很蹩脚,我知道。

4

3 回答 3

2

例如,如果您考虑 Google 是如何做到的,他们使用Bigtable(请参阅此问题进行讨论)我对它的内部工作原理一无所知,因此无法发表评论。

select至于您的问题,不可能update一次性完成 - 即在纯 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)

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

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

于 2012-09-06T14:38:18.550 回答
1

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

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

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

于 2012-09-06T14:42:04.727 回答
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
于 2012-09-06T14:35:35.353 回答