如果SQLite中的架构雾匹配则替换表

时间:2019-03-23 13:35:39

标签: sqlite database-schema

我正在研究大量使用SQLite3的应用程序,并希望确保表是正确的:它们是我对它们的期望(具有正确的列,列类型,notnull等)。我目前的做法是手动检查PRAGMA table_info()返回的数据,并在错误的情况下删除表。

CREATE TABLE IF NOT EXISTS仅检查表是否存在,但不与传递的描述匹配。通常,它很有用,但不适用于类型检查。

是否有一种方法可以比我已经做的更好呢?

1 个答案:

答案 0 :(得分:1)

我这样做的方法是使用数据库user_version来跟踪架构更改。因此,一般步骤是:

在初始数据库创建时,将用户版本设置为1,PRAGMA USER_VERSION = 1

在您的程序中,检查是否需要使用以下伪代码(current_schema_version最初为1,但在每次模式更改时都会递增)来更新/删除/重新创建表。

if user_version == 0
    new database, so create all tables in the database
    set user_version = current_schema_version
else if user_version == current_schema_version - 1
    create/recreate tables, or whatever other adjustments have to be made for new schema
    set user_version = current_schema_version
endif