【问题标题】:What is the use of SQLite connection string "Data Source = :memory:"?SQLite 连接字符串“Data Source = :memory:”有什么用?
【发布时间】:2013-04-23 18:02:21
【问题描述】:

当我无意中找到一种方法来快速测试我的第一个 SQLite 用户定义函数而无需创建 SQLite 数据库时,我发现了这个简短的 SQLite 连接字符串,它帮助我快速测试了函数(对此很满意) :

SQLiteConnection con = new SQLiteConnection("Data Source = :memory:");

至少这是出于测试目的(我猜是这样)。我想知道我们还能用它做什么?我可以即时创建一些数据库并在某处保存为文件吗?

这称为内存数据库,通常用于易失性存储设备,在设备关闭后无需保存数据,适用于通过网络进行实时处理。这就是我对它的一些用法的全部了解,但我真的没有经历过任何与之相关的项目。

如果您有什么要分享的(以您的经验),请在这里分享,我将不胜感激。谢谢!

【问题讨论】:

  • 这让我想起了在 MSSQL 中使用临时表的一点点。如果您有足够的内存/磁盘空间来支持它,我认为搜索内存表的速度会非常有利。
  • 我不知道临时表是如何工作的,但我猜它们是在磁盘上的某个位置而不是内存 (RAM) 表上创建的。这种内存中的东西当然优于基于磁盘的东西。
  • 我认为this 是关于这个主题的很好读物。仅供参考,temp table 可以在内存或本地磁盘中创建。 +1,顺便说一句。
  • @Brian,对于 MsSql 比较,这些应该类似于 DECLARE @myTable TABLE (...); 的表变量,因为它们永远不会像 CREATE TABLE #myTable(...) 最终会持久保存在磁盘和临时表中。

标签: c# sql database sqlite


【解决方案1】:

对于一个项目,我必须比较两个 SQLite 数据库。

我将:memory: 数据源用作帮助比较数据库的临时表的“主”(这是数据库的默认别名),然后为两个数据库指定别名attached。这样我就可以从同一个SQLiteConnection 访问数据库和临时数据库。

我不认为 SQLite 提供了将内存数据库保存为文件的任何方法,但是如果您愿意,可以使用相同的方法:附加空数据库并使用复制数据

CREATE TABLE attachedDb.TableName AS SELECT * FROM main.TableName

【讨论】:

    【解决方案2】:

    我发现内存数据库对于运行自动测试非常有用。它们的运行速度比基于文件的数据库快,在测试结束时会自动丢弃,不会弄乱我的硬盘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 2010-09-21
      • 2020-12-18
      • 2010-12-31
      • 2016-01-20
      • 1970-01-01
      相关资源
      最近更新 更多