Таблица схемы
Содержание
1. Введение
Каждая база данных SQLite содержит единственную «таблицу схемы», которая хранит схему этой базы данных. Схема базы данных — это описание всех других таблиц, индексов, триггеров и представлений, содержащихся в базе данных. Таблица схемы выглядит так:
CREATE TABLE sqlite_schema( type text, name text, tbl_name text, rootpage integer, sql text );
Таблица sqlite_schema содержит по одной строке для каждой таблицы, индекса, представления и триггера (в совокупности «объекты») в схеме, за исключением записи для самой таблицы sqlite_schema. Дополнительную информацию о том, как SQLite использует таблицу sqlite_schema внутри, см. в подразд. «хранение схемы» документации по формату файла fileformat2#ffschema файла fileformat2.
2. Альтернативные имена
Таблица схемы всегда может быть указана под именем «sqlite_schema», особенно если квалифицирована именем схемы, например, «main.sqlite_schema» или «temp.sqlite_schema». Но для совместимости с прошлыми версиями также распознаются некоторые альтернативные имена, включая:
- sqlite_master
- sqlite_temp_schema
- sqlite_temp_master
Альтернативы (2) и (3) работают только для базы данных TEMP, связанной с каждым подключением к базе данных, но альтернатива (1) работает везде. По историческим причинам обратные вызовы из интерфейса sqlite3_set_authorizer() всегда ссылаются на таблицу схемы с помощью имен (1) или (3).
3. Интерпретация таблицы схемы
Значения полей таблицы схемы следующие:
- type
-
Столбец sqlite_schema.type будет одним из следующих текстовых строк: 'table', 'index', 'view' или 'trigger' в зависимости от типа определенного объекта. Строка 'table' используется для обычных и виртуальных таблиц.
- name
-
Столбец sqlite_schema.name будет содержать имя объекта. UNIQUE и PRIMARY KEY ограничения на таблицы заставляют SQLite создавать внутренние индексы с именами вида "sqlite_autoindex_TABLE_N", где TABLE заменяется именем таблицы, содержащей ограничение, а N — целое число, начинающееся с 1 и увеличивающееся на 1 с каждым ограничением, указанным в определении таблицы. В таблице WITHOUT ROWID запись sqlite_schema для PRIMARY KEY отсутствует, но имя "sqlite_autoindex_TABLE_N" отводится для PRIMARY KEY так, как если бы запись sqlite_schema существовала. Это повлияет на нумерацию последующих ограничений UNIQUE. Имя "sqlite_autoindex_TABLE_N" никогда не выделяется для INTEGER PRIMARY KEY, ни в таблицах rowid, ни в таблицах WITHOUT ROWID.
- tbl_name
-
Столбец sqlite_schema.tbl_name хранит имя таблицы или представления, с которой связан объект. Для таблицы или представления столбец tbl_name является копией столбца name. Для индекса tbl_name — это имя таблицы, которая индексируется. Для триггера столбец tbl_name хранит имя таблицы или представления, которое вызывает срабатывание триггера.
- rootpage
-
Столбец sqlite_schema.rootpage хранит номер страницы корневой страницы B-дерева для таблиц и индексов. Для строк, определяющих представления, триггеры и виртуальные таблицы, столбец rootpage равен 0 или NULL.
- sql
-
Столбец sqlite_schema.sql хранит текст SQL, описывающий объект. Этот текст SQL — это оператор CREATE TABLE, CREATE VIRTUAL TABLE, CREATE INDEX, CREATE VIEW или CREATE TRIGGER, который, если будет вычисляться над файлом базы данных, когда он является основной базой данных подключения к базе данных, воссоздаст объект. Текст обычно является копией исходного оператора, используемого для создания объекта, но с примененными нормализациями, чтобы он соответствовал следующим правилам:
- Ключевые слова CREATE, TABLE, VIEW, TRIGGER и INDEX в начале оператора преобразуются в прописные буквы.
- Ключевое слово TEMP или TEMPORARY удаляется, если оно встречается после начального ключевого слова CREATE.
- Любой квалификатор имени базы данных, который встречается перед именем создаваемого объекта, удаляется.
- Удаляются начальные пробелы.
- Все пробелы после первых двух ключевых слов преобразуются в один пробел.
Текст в столбце sqlite_schema.sql является копией исходного текста оператора CREATE, который создал объект, за исключением нормализованного вида, как описано выше, и модифицированного последующими операторами ALTER TABLE. sqlite_schema.sql равен NULL для внутренних индексов, которые автоматически создаются UNIQUE или PRIMARY KEY ограничениями.
4. Создание и изменение таблицы схемы
SQLite создает таблицу схемы при создании базы данных и изменяет ее содержимое по мере того, как пользователи SQLite отправляют операторы DDL для выполнения. Пользователям нет необходимости изменять ее в обычных обстоятельствах, и они несут ответственность за возможную повреждение базы данных, если они ее изменят.
Последнее изменение этой страницы 16 июня 2023 г. 10:11:06 UTC
SQLite is in the Public Domain.
https://sqlite.org/schematab.html