我正在寻找一种方法来设置(通过SQL)一个日志表,其中包含对我的sqlite数据库所做的所有事情(最好是根据发布到数据库的insert,create table等语句).我确信有办法通过在每个表上设置触发器来实现它,但这只是太多的工作,如果我稍后更改数据库的模式,那就不好了.是否存在一个对数据库起作用的全局事物(如数据库本身的触发器)?
我也愿意提供其他建议来保存对sqlite数据库所做更改的记录,以便我可以在几个月后回顾这些更改.
(编程当然有方法,但我不能确定我的程序是唯一写入数据库的程序).
小智 7
虽然以下内容不符合您的所有要求,但您可能希望看到一种方法.Mike Chirico的SQLite教程有一个关于记录所有插入,更新和删除的部分,它模仿MySQL的binlog功能.
它依赖于必须与您希望跟踪其更改的每个表的架构匹配的触发器.也就是说,如果您的表有一个名为"a"的字段,那么日志记录表需要跟踪"aOLD"和"aNEW".通过这种方式,触发器能够记录对该特定表中的字段所做的更新,插入和删除.
小智 0
这些功能可能有用
void *sqlite3_update_hook(
sqlite3*,
void(*)(void *,int ,char const *,char const *,sqlite3_int64),
void*
);
void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
void *sqlite3_profile(
sqlite3*,
void(*xProfile)(void*,const char*,sqlite3_uint64), void*
);
Run Code Online (Sandbox Code Playgroud)
他们似乎对个别数据库起作用
我能看到的唯一全局方法是使用
sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
int sqlite3_vfs_unregister(sqlite3_vfs*);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8390 次 |
| 最近记录: |