分页和并发更新

时间:2017-08-02 16:52:34

标签: mysql sql postgresql pagination h2

假设有一个包含数据的表products

id | product | amount
---------------------
 1 | keyboard|   1
 2 | monitor |   2
 3 | computer|   3
 4 | mouse   |   4

userA通过两个产品从此表加载数据。所以他做到了 SELECT * FROM products ORDER BY amount LIMIT 2 OFFSET 0他获得了身份12的产品。但是,当userA正在读取两个第一个位置时,userB更改了表中的数据,因此它变为

id | product | amount
---------------------
 1 | keyboard|   3
 2 | monitor |   1
 3 | computer|   3
 4 | mouse   |   1

现在,UserA需要其他数据,因此他SELECT * FROM products ORDER BY amount LIMIT 2 OFFSET 2并且他获得了ID为24的产品,这不是他所期望的。

所以我们在这里看到,如果有多个用户和一些用户进行更新而其他用户正在阅读某些页面,则会出现分页问题。这些问题是如何解决的?当然,在实例中,有数千行+连接。

1 个答案:

答案 0 :(得分:0)

在上面的例子中,按变量排序是挑战。

你能解决这个问题的一种方法是,

  • 在该示例中,在将下一页查询结果数据绑定到列表之前,检查结果中的任何项是否已在先前查询中获取。如果是,请使用更新后的值更新这些列表项,然后再次跳过添加它们。这必须在客户端完成。

最好通过添加“ LastModificationTime ”等字段来审核此类数据,以指示上次修改该行的时间,并将其与其他列一起显示。