【问题标题】:SQLite Transactions and LastInsertRowIDSQLite 事务和 LastInsertRowID
【发布时间】:2014-11-21 13:42:49
【问题描述】:

我将 SQLite 数据库与用于 .NET 的 System.Data.Sqlite 实现结合使用。

我在一个循环中将记录插入到多个表中(以两个表为例)。我首先启动一个事务,然后在表 1 中插入一条记录。然后我将 connection.LastInsertRowID 和该值(作为外键)一起插入一条记录到表 2 中。

我为所有记录执行此操作,然后提交事务。

为什么这样做会影响性能?如果由于尚未提交事务而尚未真正输入记录,如何知道LastInsertRowID 的值?是否每次都需要从前面的步骤中猜测值,从而降低性能?

【问题讨论】:

  • 现在无法验证,但我怀疑如果事务回滚,它会选择下一个数字并删除该数字(即在序列中留下一个洞)。
  • 这很糟糕吗?如果在插入之前在同一事务中删除记录怎么办?

标签: sql database sqlite transactions system.data.sqlite


【解决方案1】:

在您自己的数据库连接中,您在事务中所做的所有更改都已经可见。 (只有在您回滚事务时它们才会消失。)

您所做的更改实际上会写入页面缓存中的表中。 如果页面缓存溢出,则将更改写入数据库文件(但会备份旧数据以便回滚事务)。 详情请见Atomic Commit In SQLite

【讨论】:

  • 我明白了。谢谢您的回答。有趣的东西:-)
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 2010-12-11
  • 1970-01-01
  • 2012-06-24
  • 2015-06-14
相关资源
最近更新 更多