【问题标题】:How do i get information about foreign keys in SQLite?如何在 SQLite 中获取有关外键的信息?
【发布时间】:2018-01-29 18:56:27
【问题描述】:

sqlite_master 表似乎缺少信息。我怎样才能得到一些关于我的表的额外信息,比如约束信息等。 有什么例子吗?还是有一些我从未听说过的有用的图书馆?

【问题讨论】:

  • 为什么需要?该信息应该在您的文档中,您不需要查询数据库。
  • 我想从我的手机打开任何 sqlite 数据库,从数据库中获取所有外键的列表,然后检查是否可以强制执行引用完整性,如果不能向用户显示所有悬空指针。
  • 这是我的项目,做一个数据库管理器

标签: android sql sqlite


【解决方案1】:

使用

PRAGMA foreign_key_list(table);

返回表的外键。

然后,你可以使用

PRAGMA foreign_key_check; 
PRAGMA foreign_key_check(table);

列出违规行为,而不是自己做。

【讨论】:

    【解决方案2】:

    sqlite_mastersql 列包含用于创建表的 SQL,因此包含外键信息。

    SELECT tbl_name,sql FROM sqlite_master WHERE sql LIKE('%REFERENCES%')
    

    将查找具有外键的表的行。

    • REFERENCES,而不是FOREIGN,将包括在列级别定义的FOREIGN KEYs(作为列约束),它只使用外键子句,因此不包括FOREIGN KEY

    但是,PRAGMA foreign_key_list(????)(其中???? 是要检查的表的名称)以更可用的格式提供信息(如下例所示)。

    例如从 sqlite_master 中提取可能会导致(添加换行符):-

    CREATE TABLE Match(id_Match INTEGER PRIMARY KEY AUTOINCREMENT, 
        id_Court INTEGER REFERENCES Court(id_Court), 
        id_Player INTEGER REFERENCES Player(id_Player), 
        id_Player1 INTEGER REFERENCES Player(id_Player))
    

    虽然使用PRAGMA foreign_key_list(Match) 会导致:-

    【讨论】:

      猜你喜欢
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      相关资源
      最近更新 更多