Suas tags sugerem que você entenda qual é a resposta - bloqueio. Bancos de dados relacionais (geralmente) implementam as propriedades ACID das transações, que garantem a consistência dos dados. Na prática, isso às vezes é relaxado por motivos de desempenho, mas a maioria dos bancos de dados oferece algum método para atingir esse objetivo.
No MySQL, os mecanismos de bloqueio dependem do mecanismo de armazenamento subjacente. O InnoDB oferece várias opções, descritas na documentação .
Para conseguir esses bloqueios, você basicamente tem duas opções sintáticas com um
SELECT
:select . . . for update
select . . . lock in share mode
Observe que essas instruções devem ser usadas em uma transação explícita.