【问题标题】:Java JDBC getting old values after deleting and inserting new rowsJava JDBC在删除和插入新行后获取旧值
【发布时间】:2014-06-03 10:16:39
【问题描述】:

我在 mysql (InnoDB) 中有一个包含超过 700 万行的表,并且我使用 Java 进行了一些操作。在我不得不删除一些行并插入一些新行之前,一切都正常工作。

问题在于,当我进行选择时,我不断获取旧值而不是新闻。例如,如果我尝试进行计数(*),我会得到 2760,而不是 2786。

有什么想法吗?

感谢您的宝贵时间。

【问题讨论】:

  • 对我来说感觉像是一个交易问题。自动提交关闭了吗?
  • 如果没有自动提交,也许你应该先commit 删除和插入查询。
  • 丢失提交或repeatable read 默认隔离级别的影响。在运行选择之前在您用来验证数据的工具中运行commit(或rollback)以确保您已结束那个事务。
  • @a_horse_with_no_name ,由于可重复读取,我面临问题。你能写一个答案来解决这个问题吗?

标签: java mysql sql jdbc


【解决方案1】:

如果数据库选择了自动提交选项,请检查数据库选项。

如果无法自动提交,请在每次事务后创建一个 db.commit() 并同步您的事务类(出于安全原因)。

【讨论】:

    【解决方案2】:

    使用count(id) 而不是count(*),其中id 是表的主键,因为对于计数行count(id)count(*) 更可取

    你应该提到确切的问题,以便我们可以轻松解决它,所以提供一些你卡住的情况

    【讨论】:

    • 如果id 是主键,那么count(id)count(*) 之间绝对没有区别,在这种情况下,它们都不会比另一个更快或行为不同。在任何情况下,这都不能回答问题。
    猜你喜欢
    • 2019-04-20
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多