SQLite3:附加:内存:已经创建的数据库?

时间:2018-03-24 12:58:43

标签: sqlite

我正在使用SQLite3来更快地在内存中包含一些复杂的结构。因此我只在内存数据库中使用,或至少我直到现在。 现在我正在创建一个文件,我想将许多表中的一个复制到这个文件中。有很多文章解释了如何做到这一点,一旦数据库被附加,这是我喜欢的方式,但是,我似乎无法确定如何附加已经实例化的内存数据库。 将':memory:'传递给attach语句似乎创建了一个全新的数据库,这是有意义的,因为如果我们有多个打开的话,它会知道在内存数据库中要附加哪个数据库。 有没有办法通过比如附加数据库的C指针来附加? 如果我已经打开了两个磁盘数据库并且不想通过attach命令隐式地第三次调用open,那么这也很有用。 到目前为止的搜索似乎表明没有办法做到这一点。 如果没有,是否有其他方法将其附加到内存数据库中,最好不创建临时文件?

最佳, 亚伦

1 个答案:

答案 0 :(得分:0)

只需将文件DB附加到内存数据库。

如果你真的想以相反的方式做到这一点,你必须启用URI文件名并使用它们; documentation说:

  

如果朴素的":记忆:" name用于指定内存数据库,然后该数据库始终具有专用高速缓存,并且仅对最初打开它的数据库连接可见。但是,可以通过两个或多个数据库连接打开相同的内存数据库,如下所示:

ATTACH DATABASE 'file::memory:?cache=shared' AS aux1;
     

这允许单独的数据库连接共享相同的内存数据库。当然,共享内存数据库的所有数据库连接都需要在同一个进程中。