【问题标题】:sqlite C api how to figure out what tables have foreign keys?sqlite C api如何找出哪些表有外键?
【发布时间】:2013-07-31 20:11:59
【问题描述】:

使用 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)

我希望能够为表“跟踪”返回一个列表,其中有外键返回到表 Artist 列 artistid?

我没有看到执行此操作的 api?为了汇总,我需要在打开数据库时以编程方式执行此操作。

谢谢。

使用PRAGMA foreign_key_list(Valuation)后;

我回来了:

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

我知道我需要在垂直条上拆分,但前两列是什么? 0|0 ?

【问题讨论】:

  • 这个有吗? PRAGMA foreign_key_list(table-name);
  • 我查看了源代码,看起来这些列是:id、sequence、table、from、to、on_update、on_delete、match
  • PRAGMA 应该产生一个结果集 IIRC...

标签: sqlite


【解决方案1】:

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

要获取有关表的外键的信息,请使用:

PRAGMA foreign_key_list(table-name);

此编译指示为表“table-name”的 CREATE TABLE 语句中的 REFERENCES 子句创建的每个 foreign key constraint 返回一行。

【讨论】:

  • 我试过这个并返回:PRAGMA foreign_key_list(Valuation); 0|0|Stock|StockId|Id|无操作|无操作|无
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多