gpt4 book ai didi

c++ - 如果我删除一些 "special"SQLite 表会发生什么

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:52 27 4
gpt4 key购买 nike

首先,一些背景信息,也许有人提出了一些比我尝试做的更好的方法。我需要将 SQLite 数据库导出到文本文件中。为此,我必须使用 C++ 并选择使用 CppSQLite 库。

我所做的是收集创建查询,然后导出每个表数据,问题是存在像 sqlite_sequencesqlite_statN 这样的表。在导入过程中,我无法创建这些表,因为它们是特殊用途的,所以主要问题是,如果这些表不存在,是否会影响稳定性?

问题的另一部分。有什么方法可以使用 CppSQLite 或任何其他用于 C++ 的 SQLite 库来导出和导入 SQLite 数据库吗?

附言复制数据库文件的解决方案不适用于这种特定情况。

最佳答案

sqlite_开头的对象名是保留的;即使您愿意,也无法直接创建它们。 (但是你改变了其中一些的内容,你可以删除 sqlite_stat* 表。)

sqlite_sequence 表是在创建具有 AUTOINCREMENT 列的表时自动创建的。表的实际序列值的记录是在首先需要时创建的。如果要保存/恢复序列值,则必须重新插入旧值。

sqlite_stat* 表由 ANALYZE 创建。导入 SQL 文本后运行 ANALYZE 最简单,但速度较慢;更快的方法是通过在不会被分析的表(例如 sqlite_master)上运行 ANALYZE 来创建一个空的 sqlite_stat* 表,然后手动插入旧记录。

这一切都是在sqlite3命令行工具的.dump命令中实现的(源代码在shell.c中):

SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table t(x integer primary key autoincrement);
sqlite> insert into t default values;
sqlite> insert into t default values;
sqlite> analyze;
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE t(x integer primary key autoincrement);
INSERT INTO "t" VALUES(1);
INSERT INTO "t" VALUES(2);
ANALYZE sqlite_master;
INSERT INTO "sqlite_stat1" VALUES('t',NULL,'2');
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('t',2);
COMMIT;
sqlite>

关于c++ - 如果我删除一些 "special"SQLite 表会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com