Se eu executar essas consultas uma a uma, todas falharão, exceto a primeira:
Consulta1:
flush table tablename1 with read lock;
Funciona
Consulta2:
flush table tablename2 with read lock;
Erro: não é possível executar o comando fornecido porque você possui tabelas ativas bloqueadas mysql
Se eu executar, da forma abaixo, funciona:
Consulta:
flush table tablename1,tablename2 with read lock;
O que está acontecendo lá dentro?
Isto é porque
está contido em uma transação e
não é.
Neste segundo cenário, a primeira tabela está bloqueada para essa sessão. Essa sessão não pode adquirir um segundo bloqueio em outra mesa porque a sessão já tem uma mesa aberta. Se você tentasse acessar outra tabela diferente usando um SELECT, dentro dessa mesma sessão , por exemplo tablename2, isso também seria recusado.
Para encurtar a história, ao bloquear apenas uma tabela, você está dizendo que a sessão atual só tem acesso a essa tabela. Pelo menos é assim que eu entendo a documentação do MySQL.
Ou você poderia apenas usar
como você já descobriu e esta é a sintaxe fornecida pela documentação do MySQL aqui
De acordo com esta página , todos os bloqueios em uma sessão devem ser obtidos em uma única instrução.