SQL-92 — третья версия языка запросов к базам данных SQL. В отличие от стандарта SQL-89, третья версия стала весьма существенным обновлением языка. За исключением некоторых мелких противоречий, стандарт SQL-89 практически полностью совместим со стандартом SQL-92.
История
правитьПервый международный стандарт языка SQL был принят в 1989 г. (он получил соответствующее обозначение SQL/89), и подавляющее большинство СУБД начала 90-х объявили о поддержке этого стандарта. Однако у этого стандарта выявились недостатки, а именно: очень многие важные свойства языка стандарт устанавливает как определяемые в реализации или зависимые от неё. Это дало большой простор к расхождениям между различными реализациями SQL. Во-вторых, некоторые практически важные аспекты языка вообще не упоминаются в стандарте SQL/89. К ним прежде всего относятся правила встраивания языка SQL в язык программирования Си и так называемый динамический SQL. В результате производители СУБД реализовывали собственные механизмы, причём малосовместимые друг с другом. Это привело к тому, что сложилась ситуация, когда код одной СУБД, соответствующей стандарту SQL/89, оказался непереносим на другую СУБД, также соответствующую стандарту SQL/89[1].
В целях устранения недостатков стандарта SQL/89, в конце 1992 г. был принят новый международный стандарт языка SQL (SQL/92). Он также оказался не лишён огрехов, но всё же являлся существенно более точным и полным, чем SQL/89. SQL/92 не только восполняет недостатки SQL/89, но содержит также много новых свойств.
Основные отличия от SQL/89
правитьВ новом стандарте появилась возможность использования типа данных символьных строк переменной длины (то есть при спецификации столбца указывается предельно допустимый размер хранимой строки в символах, а реально в базе данных хранится ровно столько символов, сколько их ввёл пользователь), введены типы данных битовых строк постоянной и переменной длины (как они реально хранятся в базе данных—в стандарте не определяется), стандартизованы типы данных для работы с датой и временем: DATE (дата), TIME (время) и INTERVAL (временной интервал)[2].
При создании схемы базы данных (впоследствии можно изменить) можно определить особенности национального набора символов, включая правила упорядочения, при этом могут определяться наборы символов, используемые как в хранимых текстовых строках, так и в идентификаторах[2].
В новом стандарте появилась возможность создавать хранимые и представляемые таблицы и задавать или удалять привилегии доступа при помощи операторов (CREATE TABLE
, CREATE VIEW
, GRANT
, REVOKE
) в любой момент времени в любой транзакции вне оператора определения схемы. Появились операторы уничтожения таблиц (DROP TABLE
и DROP VIEW
), которые также можно выполнять внутри любой транзакции (при наличии соответствующих привилегий). Также впервые определён оператор ALTER TABLE
, позволяющий динамически изменять характеристики ранее созданной таблицы (в частности добавлять к ней новые столбцы)[2].
Список нововведений
править- SQL Agent
- Новые типы данных:
DATE
,TIME
,TIMESTAMP
,INTERVAL
, строковый типBIT
, строковый типVARCHAR
, а также строкиNATIONAL CHARACTER
. - Поддержка дополнительных наборов символов помимо необходимых для представления SQL-запросов.
- Новые скалярные операции, например, конкатенация строк, математические операции с датой и временем, поддержка условий.
- Новые операции с наборами, например,
UNION JOIN
,NATURAL JOIN
, поддержка проверки различия в наборах, пересечение наборов. - Поддержка изменения определений схем за счет использования
ALTER
иDROP
. - Встроенная поддержка языков Си, Ада и MUMPS.
- Новые возможности пользовательских прав.
- Новая функциональность проверки целостности данных, например,
CHECK
-ограничение. - Новые определения схем для «информации».
- Динамическое исполнение запросов (в отличие от заранее подготавливаемых).
- Улучшенная поддержка удалённого доступа к базам данных.
- Временные таблицы.
- Уровни изолированности транзакций.
- Новые операции приведения типов данных «на лету» при помощи функции
CAST
. - Динамические курсоры.
- Обратная и будущая совместимость с прочими стандартами SQL.
- Call Level Interface
Примечания
править- ↑ Стандарты языка реляционных баз данных SQL: краткий обзор Архивная копия от 29 декабря 2010 на Wayback Machine (рус.)
- ↑ 1 2 3 Сводка отличий SQL/92 от SQL/89 Архивная копия от 13 декабря 2009 на Wayback Machine (рус.)
Ссылки
править- The SQL-92 standard (англ.) (текст стандарта)
- BNF Grammar for ISO/IEC 9075:1992 — Database Language SQL (SQL-92) (англ.)
- Некоторые черты SQL/92 (рус.)
- SQL-92 (Справочное руководство) (рус.)