Spec-Zone.ru › SQLite

Таблица схемы

Содержание
1. Введение
2. Альтернативные имена
3. Интерпретация таблицы схемы
4. Создание и изменение таблицы схемы

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». Но для совместимости с прошлыми версиями также распознаются некоторые альтернативные имена, включая:

  1. sqlite_master
  2. sqlite_temp_schema
  3. 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API