SQL
Итак, мы создали модель данных. Что делать дальше? Взаимодействовать с этими данным. Для этого взаимодействия существует инструмент под названием SQL (Structured Query Language) - язык программирования, применяемый для создания, модификации и управления данными в РБД.
В 1970 - 1980-х годах компании и личности разрабатывали различные версии языков для управления РБД, которые к тому времени были уже сильно популярны. В связи с этим было принято решение разработать стандарт языка, чтобы унифицировать работу с СУБД. В 1986 году была принята первая версия стандарта языка ANSI SQL. Одной из самых значительных версий является версия SQL-92. Самая свежая версия стандарта - SQL:2008. Большинство СУБД в большей либо меньшей степени поддерживают данный стандарт.
Заметки на полях
В некоторой литературе встречается информация о том, что стандартизация позволяет добиться переносимости данных с одной СУБД на другую. Это не совсем верно (скорее даже "совсем не верно"). Это связано с тем, что каждая СУБД в итоге имеет свои особенности, перенос которых проходит через боль и страдание. Да и если вас посещает мысль о смене СУБД - это тревожный сигнал. Поэтому лучше уделить больше времени выбору инструментария на этапе проектирования.
Важной концептуальной особенностью языка SQL является его декларативность - мы не говорим, как делать (как обрабатывать, как перебирать; не указываем на то, где эти данные хранятся - какие файлы открывать и как их считывать), а говорим, какие данные нам нужны. Например:
SELECT title, author, issued_at FROM books WHERE issued_at > 2000;
--- дай мне заголовки, авторов и год издания всех книг,
--- изданных в XXI веке.
В этом свойстве скрывается огромная мощь, которая, кстати, активно проникает в другие сферы разработки: начиная от написания кода (функциональное программирование), заканчивая описанием серверов (управление конфигурациями). То есть мы абстрагируемся от реализации и поднимаемся на уровень выше.
Операторы языка SQL условно можно поделить на следующие составляющие:
DDL (Data Definition Language) - язык описания данных (схемы).
CREATE
- создание.ALTER
- изменение.DROP
- удаление.
DML (Data Manipulation Language) - язык манипулирования данными.
INSERT
- добавление данных.UPDATE
- изменение существующих данных.DELETE
- удаление данных.
DQL (Data Query Language) – язык запросов.
SELECT
- выборка данных.
DCL (Data Control Language) - язык определения доступа к данным.
GRANT
- предоставления пользователю/группе пользователей прав доступа на определенные операции с объектом.REVOKE
- отзыв ранее предоставленных прав.DENY
- запрет права доступа; имеет приоритет над предоставленным правом с помощьюGRANT
TCL (Transaction Control Language) - язык управления транзакциями.
COMMIT
- совершение, фиксирование, применение транзакции.ROLLBACK
- откатывание изменений, совершенных в текущей транзакции.SAVE POINT
- разделение транзакции на более мелкие участки.
Вопросы
- Поразмышляйте о том, что происходит в СУБД, когда она решает, как получить данные.
TODO
- DDL. Переносим модель в реальную БД.
- DML