практика 'Блокировки'

This commit is contained in:
mnoskov
2026-03-13 12:18:33 +03:00
parent da6270bf90
commit f4eaf9d640
@@ -0,0 +1,21 @@
-- Задание 1
SELECT * FROM mnoskov.users WHERE id = 1;
-- Если две одновременные сессии выполнят этот запрос, то в обеих все выведется, и ошибок или очереди не бкдет
-- Потому что этот запрос только на чтение
-- Задание 2
-- Первая сессия будет просто ждать окончания выполнения первой
-- Если разрешить обоимUPDATE пройти одновременно, то получится какая-то херня пологаю, они смешаются, или че-то такое
-- У Alice в итоге останется второй email, тк он выполнится последним. Порядок COMMIT важен, тк в последствии этого порядка будут выполняться запросы
-- Задание 3
-- select выполнится тк просто читает, а update встанет в очередь, тк он попытается изменить 'забронированные данные'
-- FOR UPDATE помогает избежать ошибок когда происходит покупка товара или че то такое, когда идет процесс изменений в данных
-- Задание 4
-- Дедлок возникает потому что каждая сессия заблокировал то, что нужно другой сессии. База отменит одну из сессий, чтобы прошла хоть какая-то
-- Чтобы дедлок не возникал, нужно обновления все производить в одном порядке
-- Если при массовых обновлениях не соблюдать порядок строк, то будет возникать жопа из дедлоков