Изучив в Интернете информацию об уровнях транзакционной изоляции, я понял, что блокировка строк в MySQL может быть достигнута с помощью: SELECT...FOR UPDATE
или же LOCK IN SHARE MODE
а также, что запрос на блокировку строки должен выполняться после запуска транзакции. Поэтому я натолкнулся на пример, иллюстрирующий реализацию уровня изоляции READ COMMITTED для двух сессий:
--session 1
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN TRANSACTION;
SELECT FirstName FROM EmployeeInfo
WHERE EmpID = 1;
WAITFOR DELAY '00:00:05'
SELECT FirstName FROM EmployeeInfo
WHERE EmpID = 1;
ROLLBACK TRANSACTION;
Код для сеанса 2 выглядит так:
--session 2
UPDATE EmployeeInfo
SET FirstName = 'Frank'
WHERE EmpID = 1;
В примере кода для session1 Уровень изоляции транзакции и начало транзакции являются явными. В каком-то блоге я читал, что
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
из сеанса 1 и до сих пор получают те же результаты. Другими словами, насколько верно утверждение Операторы UPDATE неявно создают блокировки READ для затронутых строк в транзакции.Задача ещё не решена.
Других решений пока нет …