SQLite:我应该在断开连接之前分离附加的数据库吗?

时间:2018-01-31 07:18:00

标签: database sqlite perl

我应该在调用$dbh->disconnect之前分离附加的数据库,还是可以忽略DETACH这样的情况?

use DBI;

my $dbh = DBI->connect( "DBI:SQLite:dbname=my_db_1", ...

$dbh->do( "ATTACH DATABASE 'my_db_2' AS data" );
...
$dbh->do( "DETACH DATABASE data" );
$dbh->disconnect;

1 个答案:

答案 0 :(得分:3)

除非主数据库是内存数据库并且日志模式不是WAL(Write Ahead Logging),否则只关闭数据库就可以了。 即使这样,遇到问题也可能非常罕见。我认为分离是为了您想要单独分离数据库的情况。所以除非另有规定,否则这是个人选择的问题。

这基于以下内容: -

  

涉及多个附加数据库的事务是原子的,   假设主数据库不是“:memory:”和journal_mode   不是WAL。

     

如果主数据库是“:memory:”或者是journal_mode   是WAL,然后每个人的交易继续是原子的   数据库文件。但是如果主机在中间崩溃了   COMMIT更新两个或更多数据库文件,其中一些   文件可能会得到其他人可能没有的更改。

ATTACH DATABASE

This, from Tech On The Net州: -

  

关闭数据库连接时,附加的数据库将是   自动分离。

以及

  

要从连接中删除附加的数据库,请使用DETACH   DATABASE命令或关闭数据库连接。