Fab*_*ano 4 c sqlite foreign-keys
我需要在我的程序中使用外键,但我不知道如何使用C语言激活此PRAGMA.(我想使用CASCADE模式.)
使用sqlite二进制文件,我只写PRAGMA foreign_keys = on; 它的工作原理.
我的问题是:我怎么能用C做到这一点?
在某种程度上,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命令启用它.例如:
Run Code Online (Sandbox Code Playgroud)sqlite> PRAGMA foreign_keys = ON;默认情况下禁用外键约束(为了向后兼容),因此必须分别为每个数据库连接单独启用.(但请注意,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; 你也可以阅读手册.
| 归档时间: |
|
| 查看次数: |
3773 次 |
| 最近记录: |