TGViewer
SQL Ready | Базы Данных SQL Ready | Базы Данных @sql_ready · 17.5K subscribers
Post #1011 2.37K
🖥 Транзакции и блокировка строк!

При конкурентных изменениях данных важно исключить конфликты. Используем транзакции, блокировки строк и правильный уровень изоляции.

Создадим таблицу счетов:
CREATE TABLE Accounts (
id INT PRIMARY KEY,
name VARCHAR(50),
balance DECIMAL(10,2)
);


Начинаем транзакцию и блокируем строку:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- защита от грязных чтений
BEGIN;

SELECT balance FROM Accounts
WHERE id = 1 FOR UPDATE; -- эксклюзивная блокировка строки


Выполняем перевод и фиксируем результат:
UPDATE Accounts SET balance = balance - 500 WHERE id = 1;
UPDATE Accounts SET balance = balance + 500 WHERE id = 2;
COMMIT; -- сохраняем изменения


Откат транзакции:
ROLLBACK; -- можно вызвать до COMMIT при ошибке


🔥 FOR UPDATE ставит row-level exclusive lock: другие транзакции ждут, пока вы завершите свою.

➡️ SQL Ready | #практика
  • 🔥 17
  • 👍 15
  • ❤ 9
More from @sql_ready
  1. Oct 13, 2026🖥 Oracle - ограничение количества строк и выборка Top-N! Получение первых N строк с FETCH…
  2. Oct 12, 2026Обновляйте несколько колонок одним подзапросом! Вместо нескольких одинаковых подзапросов:…
  3. Oct 9, 2026❤️ sqlite-postgres-cours — большой практический курс по базам данных! Материал ведёт от пе…
  4. Oct 8, 2026Почему UNIQUE допускает несколько NULL в PostgreSQL! Ограничение UNIQUE гарантирует уникал…
  5. Oct 7, 2026📂 Шпаргалка по паттернам распределённых систем! Например, Replication повышает доступност…
  6. Oct 6, 2026Проверяйте связи с учётом периода! В PostgreSQL 18 связь может учитывать ещё и период его…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →