No MariaDB, o nível de isolamento padrão é leitura repetível. Entendo que isso significa que quando abro uma transação não verei nenhuma gravação simultânea no banco de dados.
Também tenho uma situação em que preciso garantir que alterações simultâneas não sejam feitas nas linhas. Para isso posso adquirir um cadeado exclusivo. Minha pergunta é realmente sobre como os dois funcionam em conjunto.
Se eu adquirir o bloqueio dentro da minha transação de atualização, significa que é possível que eu abra a transação e seja bloqueado porque outro processo possui o bloqueio exclusivo, quando eu obtiver o bloqueio, alterações podem ter sido feitas na linha que eu não veria, mas poderia precisar estar ciente de.
Estou hesitante em alterar o nível de isolamento, pois este é um cenário específico.
No momento, decidi adquirir o bloqueio antes de iniciar minha transação de atualização, mas isso torna a liberação do bloqueio mais problemática, pois ele não seria liberado depois que minha transação fosse confirmada. Estou perdendo algo óbvio? Então basicamente eu abro uma transação SELECT FOR UPDATE. Em seguida, abra uma segunda transação para fazer a atualização.
Semi-relacionado: O que foi dito acima significa que o bloqueio otimista quando o nível da transação é de leitura repetível é algo impossível? O bloqueio otimista envolve a verificação de uma versão/timestamp para garantir que nenhuma outra transação o tenha modificado desde que foi lido inicialmente. Com leituras repetíveis, não teríamos visibilidade de outras transações até que nossa transação fosse concluída, o que vai contra o propósito. Ou significa apenas que devo adquirir bloqueios fora das transações?