Транзакция в БД
Что такое транзакция в бд: определение, основные принципы, примеры и практические советы. Изучайте SQL для тестировщиков с подробными объяснениями для начинающих специалистов.
Транзакция в БД.
Транзакция — это архив для запросов к базе. Он защищает данные благодаря принципу «всё, или ничего».
Каждая явная транзакция в MySQL начинается с использования оператора START TRANSACTION.
Блокировка.
Блокировка — это метод ограничения доступа к данным для обеспечения корректной обработки транзакций.
Гранулярность блокировок.
Существует ряд различных стратегий, которые могут использоваться, как именно блокировать ресурс. Сервер может применять блокировку на одном из трёх разных уровней, или гранулярностей.
Блокировка таблиц.
Не позволяет нескольким пользователям одновременно изменять данные в одной таблице.
Блокировка страниц.
Не позволяет нескольким пользователям изменять данные в одной и той же странице (страница — это сегмент памяти, обычно в диапазоне от 2 до 16 Кбайт) таблицы одновременно.
Блокировка строк.
Не позволяет нескольким пользователям одновременно изменять одну и ту же строку в таблице.
Как отправить транзакцию.
Чтобы обратиться к базе данных, сначала надо открыть соединение с ней. Это называется коннект (от англ. connection, соединение). Коннект — это просто труба, по которой посылаются запросы.
Как открыть транзакцию.
Зависит от базы данных. В Oracle транзакция открывается сама, по факту первой изменяющей операции. А в MySql надо явно писать «start transaction».
Как закрыть транзакцию.
Существуют 2 варианта:
- COMMIT — подтверждаем все внесенные изменения.
- ROLLBACK — откатываем их.
И вся фишка транзакционной базы в том, что база сначала применяет запрос «виртуально», реально ничего в базе не изменив. Можно посмотреть, как запрос изменит базу, ничего при этом не сохраняя.
Представления, VIEW.
Представление — объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению.
Общий синтаксис представления.
CREATE [OR REPLACE]
VIEW имя_представления [(имена_полей_представления)]
AS select_выражение;
Практические примеры:
-- Простое представление - активные пользователи
CREATE VIEW active_users AS
SELECT id, username, email, last_login
FROM users
WHERE status = 'active';
-- Представление с вычислениями - статистика заказов
CREATE OR REPLACE VIEW order_stats AS
SELECT
u.username,
COUNT(o.id) as total_orders,
SUM(o.total_amount) as total_spent,
AVG(o.total_amount) as avg_order_amount
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.username;
-- Представление с JOIN - детали заказов
CREATE VIEW order_details AS
SELECT
o.order_id,
u.username,
p.name as product_name,
oi.quantity,
oi.unit_price
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN order_items oi ON o.order_id = oi.order_id
JOIN products p ON oi.product_id = p.product_id;
-- Использование представления
SELECT * FROM active_users WHERE last_login > '2024-01-01';
-- Удаление представления
DROP VIEW IF EXISTS order_stats;
OR REPLACE — при использовании этого опционального параметра в случае, если представление с таким именем уже существует, старое представление будет удалено, а новое создано.
В противном случае, при попытке создать представление с существующим именем, возникнет ошибка.
Зачем нужны представления.
Упрощение сложных запросов.
Представления используются для упрощения сложных запросов и создания абстракции между пользователем и базой данных.
Они могут скрывать сложность структуры данных и предоставлять упрощенный интерфейс для доступа к данным.
Улучшение производительности.
Создание представлений, которые инкапсулируют сложные запросы, может помочь оптимизировать выполнение этих запросов. Это может привести к более быстрому выполнению запросов и улучшению общей производительности базы данных.
Обеспечение безопасности.
Представления могут использоваться для обеспечения безопасности конфиденциальных данных. Создание представлений, которые ограничивают доступ к определенным столбцам или строкам данных, позволяет администраторам ограничить доступ к чувствительной информации. Это помогает гарантировать, что только авторизованные пользователи имеют доступ к конфиденциальным данным.