Uma consulta SELECT dentro de uma transação, por si só, não é protegida adequadamente contra UPDATEs e DELETEs.
O que você precisa para usar o seguinte:
Se você emitir Delete From orders Where id=1
, isso acontecerá assim que as linhas da orders
tabela liberarem seus bloqueios no final da transação. Você pode experimentar (em um Servidor de Desenvolvimento / Staging, por favor) o uso do READ UNCOMMITTED
nível de isolamento de transação para fazer com que a exclusão ocorra logicamente, mas somente na confirmação ela ficará visível e gravada permanentemente.
Na segunda transação, basicamente todas as apostas estão desativadas. Se você correr
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
A execução Delete From orders Where id=1
será confirmada imediatamente. Dependendo da ordem em que o MySQL executa essas instruções, você verá (ou não verá) as linhas de exclusão.
EMBARGO
O MySQL 5.6 agora possui o seguinte :
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
Os modificadores READ WRITE e READ ONLY definem o modo de acesso à transação. Eles permitem ou proíbem alterações nas tabelas usadas na transação. A restrição READ ONLY impede que a transação modifique ou bloqueie as tabelas transacionais e não transacionais que são visíveis para outras transações; a transação ainda pode modificar ou bloquear tabelas temporárias. Esses modificadores estão disponíveis no MySQL 5.6.5.