如何使用sqlite在C中激活外键?

Fab*_*ano 4 c sqlite foreign-keys

我需要在我的程序中使用外键,但我不知道如何使用C语言激活此PRAGMA.(我想使用CASCADE模式.)

使用sqlite二进制文件,我只写PRAGMA foreign_keys = on; 它的工作原理.

我的问题是:我怎么能用C做到这一点?

Don*_*eba 5

C 是完全一样的\xe2\x80\x94 只需执行语句即可"PRAGMA foreign_keys = ON"

\n


Jon*_*ler 5

在某种程度上,SQLLite手册说:

为了在SQLite中使用外键约束,必须在未定义SQLITE_OMIT_FOREIGN_KEY或SQLITE_OMIT_TRIGGER的情况下编译库.如果定义了SQLITE_OMIT_TRIGGER但SQLITE_OMIT_FOREIGN_KEY未定义,则SQLite的行为与版本3.6.19之前的行为相同 - 解析外键定义并使用PRAGMA foreign_key_list查询外键定义,但不强制执行外键约束.PRAGMA foreign_keys命令在此配置中是无操作.如果定义了OMIT_FOREIGN_KEY,则甚至无法解析外键定义(尝试指定外键定义是语法错误).

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

sqlite> PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

默认情况下禁用外键约束(为了向后兼容),因此必须分别为每个数据库连接单独启用.(但请注意,SQLite的未来版本可能会更改,以便默认情况下启用外键约束.小心的开发人员不会对默认情况下是否启用外键进行任何假设,而是根据需要启用或禁用它们.)应用程序也可以使用PRAGMA foreign_keys语句来确定当前是否启用了外键.

关于pragma的页面说:

  • 可能会删除特定的pragma语句,并在SQLite的未来版本中添加其他语句.无法保证向后兼容性.
  • 如果发出未知的pragma,则不会生成错误消息.简单地忽略未知的编译指示.这意味着如果pragma语句中存在拼写错误,则库不会通知用户该事实.
  • 一些编译指示在SQL编译阶段生效,而不是执行阶段.这意味着如果使用C语言sqlite3_prepare(),sqlite3_step(),sqlite3_finalize()API(或包装器接口中的类似API),pragma可以在sqlite3_prepare()调用期间运行,而不是在sqlite3_step()调用期间作为普通SQL运行陈述呢.或者pragma可能在sqlite3_step()期间运行,就像普通的SQL语句一样.pragma在sqlite3_prepare()或sqlite3_step()期间是否运行取决于pragma和SQLite的特定版本.

因此,您准备PRAGMA语句 - 并执行它以确保它生效.

可能有一个更专业的API; 你也可以阅读手册.