SQLite список ВСЕХ внешних ключей в базе данных - PullRequest
9 голосов
/ 31 марта 2011

Есть ли способ перечисления ВСЕХ внешних ключей в базе данных SQLite?

Кажется, они не хранятся в sqlite_master, а PRAGMA foreign_key_list('table') перечисляет только один за раз.

В качестве альтернативы, есть ли способ перечислить, какие внешние ключи ссылаются на таблицу?

1 Ответ

15 голосов
/ 31 марта 2011

В оболочке SQLite используйте инструкцию .schema и используйте GREP для фильтрации строк, содержащих REFERENCES.

Из shell.c в хранилище SQLite, сегодняшней версии в транке, два запроса:

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

Второй, вероятно, то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...