2011-03-31 74 views
6

有没有办法列出SQLite数据库中的所有外键?SQLite列表数据库中的所有外键

它们似乎并不存储在sqlite_master中,PRAGMA foreign_key_list('table')只能一次列出一个。

另外,有没有办法列出什么外键引用表?

回答

13

使用SQLite shell,使用.schema指令,并使用GREP来过滤包含REFERENCES的行。

从SQLite储存库shell.c,今天的版本在后备箱中,两个查询:

SELECT sql 
    FROM (
     SELECT sql sql, type type, tbl_name tbl_name, name name 
      FROM sqlite_master 
     UNION ALL 
     SELECT sql, type, tbl_name, name 
      FROM sqlite_temp_master 
     ) 
WHERE tbl_name LIKE shellstatic() 
    AND type != 'meta' 
    AND sql NOTNULL 
ORDER BY substr(type, 2, 1), name 

SELECT sql 
    FROM (
     SELECT sql sql, type type, tbl_name tbl_name, name name 
      FROM sqlite_master 
     UNION ALL 
     SELECT sql, type, tbl_name, name 
      FROM sqlite_temp_master 
     ) 
WHERE type != 'meta' 
    AND sql NOTNULL 
    AND name NOT LIKE 'sqlite_%' 
ORDER BY substr(type, 2, 1), name 

第二个可能是你在找什么。

+0

嗨,感谢Benoit。我应该提到我会在android客户端上执行此操作,因此无法访问SQLite shell。 :( – 2011-03-31 11:28:43

+0

@Fergal Moran:更新回答 – Benoit 2011-03-31 11:34:37

+1

嗨Benoit - 这给了我所有表的全部ddl,这是肯定有用的,但仍然留给我解析外键特定的东西的问题。它可能会更容易我在“SELECT tbl_name FROM sqlite_master WHERE type ='table'”的结果上调用PRAGMA foreign_keys,但我试图找到一个更简单的方法来获取它? – 2011-03-31 11:39:20

相关问题