Виртуальный столбец
В реляционных базах данных виртуальный столбец таблицы — это столбец , значения которого автоматически вычисляются с использованием значений других столбцов или другого детерминированного выражения. Виртуальные столбцы определены в SQL:2003 как сгенерированный столбец. [1] и реализуются только некоторыми СУБД , такими как MariaDB , SQL Server , Oracle , PostgreSQL , SQLite и Firebird (сервер базы данных) (синтаксис COMPUTED BY).
Выполнение
[ редактировать ]Существует два типа виртуальных столбцов:
- Виртуальные столбцы
- Постоянные столбцы
Значения виртуальных столбцов вычисляются «на лету» при необходимости, например, когда они возвращаются инструкцией SELECT. Значения постоянного столбца вычисляются при вставке строки в таблицу и записываются так же, как и все другие значения. Они могут измениться, если изменятся другие ценности. Как виртуальные, так и постоянные столбцы имеют свои преимущества и недостатки: виртуальные столбцы не занимают место на диске, но их необходимо вычислять каждый раз, когда к ним обращается запрос; постоянные столбцы не требуют процессорного времени, но занимают дисковое пространство. Однако иногда выбор недоступен, поскольку некоторые СУБД поддерживают только один тип столбца (или ни один из них).
IBM DB2
[ редактировать ]IBM Db2 поддерживает виртуальный столбец версии 8 как сгенерированный столбец. [2]
МарияДБ
[ редактировать ]MariaDB — это форк MySQL . В дереве 5.2 были добавлены виртуальные столбцы. [3]
Выражения, которые можно использовать для вычисления виртуальных столбцов, имеют следующие ограничения:
- Они должны быть детерминистическими
- Они не могут возвращать постоянные значения
- Они не могут использовать пользовательские функции или хранимые процедуры.
- Они не могут включать другие виртуальные столбцы.
- Они не могут использовать подзапросы
Постоянные столбцы могут быть индексированы и могут быть частью внешнего ключа с некоторыми небольшими ограничениями, касающимися соблюдения ограничений.
Виртуальные столбцы можно использовать только в таблицах, использующих механизм хранения, который их поддерживает. Механизмы хранения, поддерживающие виртуальные столбцы:
Таблицы MRG_MyISAM могут быть основаны на таблицах MyISAM, которые включают постоянные столбцы; но соответствующий столбец MRG_MyISAM должен быть определен как обычный столбец.
Синтаксис
[ редактировать ]Для добавления виртуального столбца можно использовать оператор CREATE TABLE или ALTER TABLE. Синтаксис, используемый для определения виртуального столбца, следующий:
<type> [GENERATED ALWAYS] AS ( <expression> ) [VIRTUAL | PERSISTENT] [UNIQUE] [UNIQUE KEY] [COMMENT <text>]
- type — тип данных столбца
- выражение — это выражение SQL, которое возвращает значение столбца для каждой строки.
- текст — необязательный комментарий столбца
MySQL
[ редактировать ]Поддержка виртуальных столбцов, известных в MySQL как сгенерированные столбцы, стала доступна в MySQL 5.7. В последующих версиях различные ограничения на их использование были смягчены. [4]
Оракул
[ редактировать ]Начиная с версии 11g, Oracle поддерживает виртуальные столбцы. [5]
SQL-сервер
[ редактировать ]Microsoft SQL Server поддерживает виртуальные столбцы, но они называются вычисляемыми столбцами. [6]
SQL Server поддерживает как постоянные, так и непостоянные вычисляемые столбцы.
Жар-птица
[ редактировать ]Firebird всегда поддерживал виртуальные столбцы, как и его предшественник InterBase , называемый вычисляемыми столбцами. [7]
Firebird поддерживает виртуальные столбцы, а не постоянные, и допускает подвыборку, вызов встроенных функций, внешних функций и хранимых подпрограмм в выражении виртуального столбца.
Синтаксис
[ редактировать ]Создание виртуального столбца можно выполнить во время создания таблицы или при добавлении столбцов в существующую таблицу. Синтаксис, используемый для определения виртуального столбца, следующий:
column_name [type] COMPUTED BY (expression)
или отраслевой стандарт
column_name [type] GENERATED ALWAYS AS (expression)
PostgreSQL
[ редактировать ]Начиная с версии 12, PostgreSQL поддерживает виртуальные столбцы, известные как сгенерированные столбцы. [8]
SQLite
[ редактировать ]Начиная с версии 3.31.0 (22 января 2020 г.), SQLite поддерживает виртуальные столбцы, известные как сгенерированные столбцы. [9]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ SQL:2003 опубликован.
- ^ Справочник по SQL, том 2, версия 8
- ^ Виртуальные столбцы
- ^ «MySQL :: Справочное руководство MySQL 5.7 :: 13.1.18.7 СОЗДАНИЕ ТАБЛИЦЫ и сгенерированные столбцы» .
- ^ «Управление схемой Oracle 11g» . Архивировано из оригинала 6 августа 2017 г.
- ^ «Вычисляемые столбцы» . 4 октября 2012 г.
- ^ "СТОЛ" .
- ^ «5.3. Сгенерированные столбцы» . 12 августа 2021 г.
- ^ «Созданные столбцы» .