2011-03-31 26 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

相關問題