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

4
在调用$dbh->disconnect之前,我需要分离已附加的数据库吗?如果不分离,会有问题吗?
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;

每次运行脚本时,您都会附加它,因此分离是一个好主意。它是否使用相同的名称尝试附加?如果是这样,您应该无论如何都会收到错误“数据库名称已在使用中”。 - Gerhard
1个回答

4
仅关闭数据库是可以的,除非主数据库是内存数据库并且日志模式不是WAL(预写式日志);即使如此,遇到问题的可能性也极为罕见。我认为提供分离是为了在您想要单独分离数据库的情况下使用。因此,这确实只是个人选择的问题,除非另有规定。
这是基于以下内容:
涉及多个附加数据库的事务是原子的,假设主数据库不是":memory:",并且日志模式不是WAL。
如果主数据库是":memory:"或者日志模式是WAL,则在每个单独的数据库文件中继续进行原子事务。但是,如果在更新两个或更多数据库文件的COMMIT过程中主机计算机崩溃,则某些文件可能会获得更改,而其他文件则可能没有获得更改。 ATTACH DATABASE 这来自Tech On The Net 指出:
当关闭数据库连接时,附加的数据库将自动分离。
还有:
要从连接中删除附加的数据库,请使用DETACH DATABASE命令或关闭数据库连接。

当有序关闭时,没有活动交易。 - CL.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接