Na verdade
PDO::beginTransaction()
segue as mesmas regras de uma START TRANSACTION
instrução no MySQL, mais informações aqui
. Isso significa que o MySQL não bloqueará a tabela imediatamente, mas seguirá o ACID as regras.
Observe que, se você precisar bloquear explicitamente algumas tabelas, poderá fazer:
$db->beginTransaction();
$db->exec('LOCK TABLES t1, t2, ...');