小。快。可靠。
三者选其二。

会话模块 C 接口

传递给冲突处理程序的常量

#define SQLITE_CHANGESET_DATA        1
#define SQLITE_CHANGESET_NOTFOUND    2
#define SQLITE_CHANGESET_CONFLICT    3
#define SQLITE_CHANGESET_CONSTRAINT  4
#define SQLITE_CHANGESET_FOREIGN_KEY 5

可以作为冲突处理程序的第二个参数传递的值。

SQLITE_CHANGESET_DATA
如果数据库中存在具有所需 PRIMARY KEY 字段的行,但更新修改的一个或多个其他(非主键)字段不包含预期的“之前”值,则在处理 DELETE 或 UPDATE 更改时,冲突处理程序将使用 CHANGESET_DATA 作为第二个参数调用。

在这种情况下,冲突行是具有匹配主键的数据库行。

SQLITE_CHANGESET_NOTFOUND
如果数据库中不存在具有所需 PRIMARY KEY 字段的行,则在处理 DELETE 或 UPDATE 更改时,冲突处理程序将使用 CHANGESET_NOTFOUND 作为第二个参数调用。

在这种情况下,没有冲突行。调用 sqlite3changeset_conflict() API 的结果是未定义的。

SQLITE_CHANGESET_CONFLICT
如果操作会导致重复的主键值,则在处理 INSERT 更改时,CHANGESET_CONFLICT 将作为第二个参数传递给冲突处理程序。

在这种情况下,冲突行是具有匹配主键的数据库行。

SQLITE_CHANGESET_FOREIGN_KEY
如果启用了外键处理,并且应用更改集会导致数据库处于包含外键违规的状态,则在提交更改集之前,冲突处理程序将使用 CHANGESET_FOREIGN_KEY 作为第二个参数恰好调用一次。如果冲突处理程序返回 CHANGESET_OMIT,则更改(包括导致外键约束违规的更改)将被提交。或者,如果它返回 CHANGESET_ABORT,则更改集将被回滚。

不提供当前行或冲突行信息。在提供的 sqlite3_changeset_iter 句柄上,唯一可以调用的函数是 sqlite3changeset_fk_conflicts()。

SQLITE_CHANGESET_CONSTRAINT
如果在应用更改时发生任何其他约束违规(即 UNIQUE、CHECK 或 NOT NULL 约束),则冲突处理程序将使用 CHANGESET_CONSTRAINT 作为第二个参数调用。

在这种情况下,没有冲突行。调用 sqlite3changeset_conflict() API 的结果是未定义的。

另请参阅 对象常量函数 的列表。