Таблица Sqlite_master объяснена

Давайте будем честными ... получение информации о таблицах - не та задача, с которой вы будете сталкиваться каждый день. Несмотря на то, что это не так уж часто, все же есть случаи, когда знание того, существует ли таблица, имеет решающее значение. Одним из случаев может быть тестирование схемы вашей базы данных. Тестируете миграцию базы данных? Мне тоже это кажется полезным.

Но как это сделать? Есть простой ответ - запросить таблицу SQLITE_MASTER с оператором SELECT, например:

SELECT name FROM sqlite_master WHERE type='table';

Подожди! Откуда взялась таблица sqlite_master?

Таблица Sqlite_master создается для каждой базы данных автоматически. Он описывает схему каждой таблицы с некоторой дополнительной информацией. Кроме того, база данных может содержать SQLITE_TEMP_MASTER, который содержит информацию о представлениях, их индексах и триггерах.

Столбец Тип может быть либо таблицей, либо индексом. В зависимости от типа, name и tbl_name может принимать разные значения.

Имя и tbl_name - наиболее интересные столбцы. Имя - это просто имя таблицы или индекса, где tbl_name, если тип - index, - это таблица, которой принадлежит индекс. Для таблицы типов tbl_name имеет значение NULL.

Корневая страница: номер страницы корневого b-дерева. Для строк, определяющих представления, триггеры и виртуальные таблицы, столбец rootpage равен нулю или NULL.

Sql - это просто инструкция CREATE для таблицы или индекса. Для автоматически созданных индексов (для реализации ограничений PRIMARY KEY или UNIQUE) sql установлено значение NULL.

Теперь, когда мы знаем, какую информацию мы можем получить, давайте посмотрим, насколько легко мы можем узнать, существует ли таблица в базе данных.

Как описано выше, столбец name сохраняет имя таблицы. В приведенном выше примере предполагается, что нас интересуют только таблицы, а не таблицы, принадлежащие индексам (которые будут храниться в столбце tbl_name ).

Следует подумать, нужно ли запрашивать также временные таблицы. В этом случае более подходящей была бы следующая версия.

Давайте посмотрим на реальный сценарий вживую. Задача - создать таблицы для каждого поддерживаемого языка. Тестовые примеры, подобные приведенным ниже, показывают, как использовать представленный метод, чтобы проверить, созданы ли все ожидаемые таблицы.

Если вам интересны подобные темы, посмотрите другие мои сообщения об автоматизированном Android и SQLite. Краткий, но все еще растущий список статей по этой теме выглядит следующим образом: