MySQL: transazioni vs tabelle di blocco

Sono un po ‘confuso con le transazioni rispetto alle tabelle di blocco per garantire l’integrità del database e assicurarmi che SELECT e UPDATE rimangano sincronizzati e nessun’altra connessione interferisca con esso. Ho bisogno di:

SELECT * FROM table WHERE (...) LIMIT 1 if (condition passes) { // Update row I got from the select UPDATE table SET column = "value" WHERE (...) ... other logic (including INSERT some data) ... } 

Devo assicurarmi che nessun’altra query interferisca ed esegua lo stesso SELECT (leggendo il ‘vecchio valore’ prima che quella connessione finisca di aggiornare la riga.

So che posso impostare di default la LOCK TABLES table per assicurarmi che solo 1 connessione faccia questo alla volta, e sbloccarla quando ho finito, ma sembra eccessivo. Avvolgere quello in una transazione fa la stessa cosa (assicurandosi che nessun’altra connessione tenti lo stesso processo mentre un’altra ancora sta elaborando)? Oppure SELECT ... FOR UPDATE o SELECT ... LOCK IN SHARE MODE essere migliore?