当前位置:  开发笔记 > 数据库 > 正文

Sqlite外键

如何解决《Sqlite外键》经验,为你挑选了1个好方法。

我尝试使用HDBC-sqlite3 haskell库启用外键.这个库使用了一个小辅助c函数

int sqlite3_open2(const char *filename, finalizeonce **ppo)

它依次调用sqlite3_open.在sqlite文档中,我发现了一个很好的sqlite3_db_config函数,可以启用外键.为了测试它,我已经快速添加了2行sqlite3_open2(最后两个列表):

int sqlite3_open2(const char *filename, finalizeonce **ppo) {
  sqlite3 *ppDb;
  finalizeonce *newobj;
  int res, *resFK, resFK1;

  fprintf(stderr, "DB pointer: %d\n", ppDb);

  res = sqlite3_open(filename, &ppDb);

  resFK1 = sqlite3_db_config(ppDb, 1002, 1, resFK);                    
  fprintf(stderr, "\nForeign Keys: ON/OFF:%d  ERR:%d\n", resFK, resFK1);  

  ...

令我惊讶的是结果:Foreign Keys: ON/OFF:0 ERR:1.

有人能给我一个暗示我做错了什么或者什么是启用外键的正确方法?



1> Drew Hall..:

根据文件:

假设在使用外键约束的情况下编译库,应用程序必须在运行时使用PRAGMA foreign_keys命令启用它.例如:

sqlite> PRAGMA foreign_keys = ON;

默认情况下禁用外键约束(为了向后兼容),因此必须分别为每个数据库连接单独启用.

所以,在你之后sqlite3_open(),你可能想要添加以下内容:

sqlite3_exec(ppDb, "PRAGMA foreign_keys = ON;", 0, 0, 0);

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有