Сам по себе запрос SELECT внутри транзакции не защищен должным образом от UPDATE и DELETE.
Для чего нужно использовать следующее:
Если вы выполните Delete From orders Where id=1
команду, это произойдет, как только строки в orders
таблице освободят свои блокировки в конце транзакции. Вы можете поэкспериментировать (на Dev / Staging Server, пожалуйста) с использованием 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 устанавливают режим доступа к транзакции. Они разрешают или запрещают изменения таблиц, используемых в транзакции. Ограничение READ ONLY не позволяет транзакции изменять или блокировать как транзакционные, так и нетранзакционные таблицы, которые видны другим транзакциям; транзакция все еще может изменять или блокировать временные таблицы. Эти модификаторы доступны с MySQL 5.6.5.