首页 > 解决方案 > vertx中数据库操作的并发问题

问题描述

我必须将insert两个属性放入table(device_id, timestamp) 但在此之前,我必须删除前一天的记录并执行选择计数以从表中获取记录总数。根据计数值,将数据插入表中。我总共有 3 个查询,它们适用于单用户测试,但如果运行 10 个或更多用户的并发测试,我的代码就会中断。我正在使用hsqldbvertx jdbc client. 有没有办法合并所有三个查询?查询是:

DELETE FROM table_name WHERE timestamp <= DATE_SUB(NOW(), INTERVAL 1 DAY)
SELECT COUNT(*) FROM table_name WHERE device_id = ?
INSERT into table_name(device_id,timestamp) values (?,?)

标签: javahsqldbvert.x

解决方案


您需要将 auto-commit 设置为 false 并在最后一条语句之后提交。

如果数据库事务控制是默认的LOCKS模式,你不会得到任何不一致,因为表被DELETE语句锁定,直到提交。

如果您已将事务控制更改为 MVCC,那么这取决于您在 INSERT 语句中使用 COUNT 的方式。


推荐阅读