2013-07-31 40 views
0

使用C API,我没有看到确定指定表的外键约束的方法吗?sqlite C api如何弄清楚哪些表有外键?

考虑这个例子:

CREATE TABLE artist(
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 
CREATE TABLE track(
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER, 
    FOREIGN KEY(trackartist) REFERENCES artist(artistid) 
); 

sqlite3_table_column_metadata()会告诉你,这是一个主键,自动增量等,但如何 我会得到外键约束?

FOREIGN KEY(trackartist) REFERENCES artist(artistid) 

我希望能够得到一个列表的表“跟踪”,有外键回表列艺术家artistid?

我没有看到一个API来做到这一点?为了进行聚合,我需要在打开数据库时以编程方式执行此操作。

谢谢。

使用PRAGMA foreign_key_list(Valuation)后;

我回来:

PRAGMA foreign_key_list(Valuation); 
0|0|Stock|StockId|Id|NO ACTION|NO ACTION|NONE 

我明白我需要拆分的竖线上,但什么是前两列? 0 | 0?

+0

可用吗? PRAGMA foreign_key_list(表名); – Tim

+0

我检查了源,看起来像列是:ID,序列,表,从,到,on_update,on_delete,匹配 – Eric

+0

PRAGMA应产生一个结果集IIRC ... –

回答

1

请注意(外国)键可以由多个列组成,所以将其作为列信息返回是没有意义的。

要获得有关表的外键信息,使用此:

PRAGMA foreign_key_list(table-name);

该编译返回一行由references子句中的表的CREATE TABLE语句创建的每个foreign key constraint“表 - 名称”。

+0

我试过这个,并得到了回报:PRAGMA foreign_key_list ); 0 | 0 |库存|库存ID |编号|无作用|无作用|无 – Eric