Статья основана на пятом видео из 30 тем курса SQL c 0 от Аристова Евгения. Ссылки на видео на платформах RUTUBE и VK видео.
В прошлой статье уже были затронуты некоторые конструкции языка SQL (create table, insert into), сегодня разберемся в них подробнее.
Из истории SQL
SQL разработан на основе работ Фрэнка Кодда в компании IBM. Подробнее об этом в моей статье
Недавно был опубликован стандарт SQL 2023
Несмотря на то, что Oracle, MSSQL и PostgreSQL поддерживают последний стандарт SQL, в каждом языке присутствуют тонкости реализации. Например, отличается набор оконных функций. Об этом надо помнить, так как даже такие классические команды, как SELECT и UPDATE, в разных СУБД могут вести себя немного по-разному.
Типы команд
DML – Data Manipulation Language – команды для работы непосредственно с данными, их изменения
DDL– Data Definition Language – операции с объектами (индексами, таблицами и т.д.), определение их свойств, непосредственно данные не затрагиваются
- ALTER
- CREATE
- DROP – не рекомендуется использовать, так как эта команда удаляет все данные в объекте. Если необходимо задать объекту новые корректные свойства вместо старых ошибочных, то используйте ALTER.
DCL -Data Control Language – управление привилегиями пользователей
- GRANT
- REVOKE
DQL – Data Query Language – выборка данных
- SELECT
TCL – Transaction Control Language – управление транзакциями. Помогает поддерживать консистентность данных. Если хотя бы в одной команде внутри транзакции произошла ошибка, то вся транзакция будет отменена.
Существует параметр autocommit, который автоматически оборачивает каждую отдельную команду в транзакцию.
Важно отметить, что любая реляционная база данных является транзакционной, то есть обладающей следующими свойствами: атомарность, согласованность, изоляцию и устойчивость. Подробнее об этом поговорим на 30 занятии.
- BEGIN/BEGIN TRANSACTION/START TRANSACTION
- COMMIT/COMMIT TRANSACTION
- ROLLBACK/ROLLBACK TRANSACTION
В более ранних стандартах в языке было выделено только три типа команд: DML, DDL, DCL. Позже добавилось ещё два блока – DQL, TCL. Как можно заметить, SELECT был вынесен в свой отдельный раздел из DML, так как было решено, что он не изменяет данные.
SQL constrains
SQL constrains – правила и ограничения, накладываемые на данные, описывающие их корректность. Примером использования являются первичный и внешние ключи (primary key, foreigh key), unique, check. Не рекомендуется использовать сложные проверки, повышающие нагрузку на базу данных, лучше отдать их на бэкенд. Если всё же используете constrains, то именуйте их.
Имена необходимы, чтобы позже к объектам можно было обращаться и изменять их.
Пример создания именованного ограничения (используем DDL):
CREATE TABLE test (i serial, t text);
ALTER TABLE test
ADD CONSTRAINT test_field_t_not_empty CHECK (t!='');
Пример создания неименованного ограничения (сравните с предыдущим, но не используйте на практике):
CREATE TABLE test (i serial, t text);
ALTER TABLE test
ADD CHECK (t!='');
Виды нагрузки на БД
Транзакционная нагрузка – OLTP – много маленьких коротких запросов. Классические примеры – онлайн-магазин и банковская система.
Аналитическая нагрузка – OLAP – построение отчетности. Например, аналитика вышеперечисленных систем, системы логирования.
Напоминаю, что PostgreSQL предназначен в основном для OLTP нагрузки.
Практический пример
Код создания таблицы из предыдущей статьи:
CREATE TABLE test (i serial, t text); --DDL
INSERT INTO test(t) VALUES ('value1'); --DML
INSERT INTO test(t) VALUES ('value2');
INSERT INTO test(t) VALUES ('value3');
Обновим ту строчку, где значение поля t равняется ‘value1’
UPDATE test
SET i = 2
WHERE t='value1'; -- DML
Удалим ту строчку, где значение поля i равно 3
DELETE FROM test
WHERE i=3; — DML
Выберем все данные из нашей таблицы (с помощью оператора *) и отсортируем их в обратном порядке (DESC). Обратите внимание, что сортируются не данные в таблице, а данные выбранные в SELECT. Исходная таблица не меняется
SELECT * FROM test
ORDER BY i DESC; — DQL
Презентация к статье здесь.
Шестая из 30 тем “Варианты NoSQL решений и отличие от РСУБД” будет скоро доступна. Если вы хотите быстрее получить доступ – присоединяйтесь к онлайн группе, ссылка доступна в описании курса.
Добавить комментарий