我有一个应用程序需要了解数据库表中某些记录的最新数量,该解决方案应该适用,而无需更改数据库代码或向其添加触发器或函数,因此我需要一个独立于数据库供应商的解决方案。 我的程序用java编写,但数据库可以是(SQLite、MySQL、PostgreSQL或MSSQL),现在我正在这样做: 在设置为守护程序的单独线程中,我的应用程序通过 JDBC 向数据库发送一个简单的命令,以了解具有条件的最新记录数量:
while(true){
SELECT COUNT(*) FROM Mytable WHERE exited='1'
}
这种编码会导致数据库锁定,减慢整个系统的速度并生成巨大的数据库日志,最终导致整个系统崩溃! 我怎样才能以正确的方式做到始终拥有某些记录的最新数量或仅在数量发生变化时进行计数?
最佳答案
SELECT
语句本身不应具有您所描述的行为。例如,SELECT
不会记录任何内容。现在,并发的 insert
/update
/delete
语句可能正在执行,并且这些语句会导致问题,因为 SELECT
锁定表。
您可以做的两件事:
- 确保比较的类型相同。因此,如果
exited
是数字,请勿使用单引号(混合类型可能会混淆某些数据库)。 - 在
上创建索引(已退出)
。基本上在所有数据库中,这都是一个命令:在 mytable(exited) 上创建索引 idx_mytable_exited
。
如果锁定和并发事务是一个问题,那么您将需要执行更多特定于数据库的操作,以避免该问题。
关于java - 计算数据库中特定记录的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685837/