SELECT запит всередині транзакції, сам по собі, не захищений належним чином від UPDATE та DELETE.
Що потрібно використовувати наступне:
Якщо ви опублікуєте Delete From orders Where id=1
це, це станеться, коли рядки в orders
таблиці звільнять свої блокування в кінці транзакції. Ви можете поекспериментувати (на сервісі Dev / Staging, будь ласка), використовуючи READ UNCOMMITTED
рівень ізоляції транзакцій, щоб видалити видалення логічно, але лише після фіксації воно стане видимим і записане назавжди.
У другій транзакції, в основному, всі ставки знімаються. Якщо ти біжиш
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
біг Delete From orders Where id=1
здійсниться негайно. Залежно від порядку, яким MySQL виконує ці операції, ви побачите (чи не бачите) рядки видалення.
КАВАТИ
MySQL 5.6 має таке :
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
Модифікатори READ WRITE і READ ONLY встановлюють режим доступу до транзакцій. Вони дозволяють або забороняють зміни таблиць, що використовуються в транзакції. Обмеження «ЧИТАТИ ТІЛЬКИ» запобігає транзакції змінювати або блокувати як транзакційні, так і нетранзакційні таблиці, видимі для інших транзакцій; транзакція все ще може змінювати або блокувати тимчасові таблиці. Ці модифікатори доступні на MySQL 5.6.5.