sqlite - 在 SQLite 的一个事务中可以完成多少次插入?

标签 sqlite transactions

我正在尝试将大量记录(数百万)插入到 SQLite 数据库中。从文件流 (C++) 中读取数据。如果我开始单个事务,执行所有 插入,然后提交该事务,我实际上只得到很小一部分记录插入到我的数据库中。

插入的那些看起来是随机的——我真的看不出有什么模式可以插入,哪些被遗漏。但是,如果我提交并在大约 2000 次插入之后再次开始事务,我就没有这个问题并且所有的记录都被插入,即使这个过程慢得多。。所以……

在一个事务中可以完成多少插入有严格的限制吗?有没有办法改变这个限制?

最佳答案

我能够毫无问题地在单个事务中插入 1000 万行。

我的猜测:

  • 您在单个语句中插入了过多的行并达到了表达式树的最大深度限制。这可以完全关闭。
  • 您正在使用没有绑定(bind)值的过长 INSERT 并达到 SQL 语句的最大长度限制。在这种情况下,使用参数绑定(bind)。
  • 这可能是库中的错误(您是否检查每个 API 返回的错误代码?)

检查 Limits In SQLite .如果您展示如何在代码中准备和执行 INSERT,可能会有所帮助。

关于sqlite - 在 SQLite 的一个事务中可以完成多少次插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199305/

相关文章:

sql-server-2005 - 应用层数据库事务的最佳实践

sql - CHECKPOINT 的工作方式与 SQL 中的 COMMIT 相同吗?

sql - 如何在sqlite中选择带空值的尾部?

Android SQLiteException : Failed to change locale for db to 'en_US'

javascript - 浮点: Can I recursively divide/multiple numbers by 2 and never get rounding errors?

django - F() 表达式和原子事务可以相互替换吗?

php - Yii2:在事务外执行查询?

linq-to-sql - 获取 "The operation is not valid for the state of the transaction.",但我没有使用事务

c# - 将 SQLite Blob 转换为十六进制再转换为字符串

java - Android SQLite - 新表 VS。新数据库