Como implicar o bloqueio de WRITE em todas as tabelas no MySql?

4

Como sugerir o bloqueio de WRITE em todas as tabelas no MySql? Eu tentei o seguinte, mas dá erro.

FLUSH TABLES mytest.mytable1 WITH  LOCK;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use 
near 'WITH  LOCK' at line 1
    
por arn 31.05.2012 / 09:49

2 respostas

4

Eu gostaria de concluir com uma declaração simples - FLUSH TABLES WITH READ LOCK; permitirá toda a sessão para a operação READ e não permitirá fazer qualquer modificação de dados para qualquer sessão. O nome do bloco LOCK TABLE WRITE; Bloqueará a tabela e permitirá fazer a leitura ou modificação de dados para a sessão emitida, mas não para outras sessões. Obrigado ......

    
por 02.06.2012 / 07:21
7

O que você está tentando fazer aqui? Bloqueios no MySQL podem ser um pouco confusos se você fizer suposições sobre o que acha que eles fazem.

  • Um bloqueio READ permite que a sessão com o bloqueio leia e outras sessões leiam, mas não escrevem.
  • Um bloqueio WRITE permite que a sessão com o bloqueio leia e grave e outras sessões sem acesso.

A sintaxe FLUSH TABLES não permite que você especifique uma lista de tabelas , além de adquirir um bloqueio. FLUSH TABLES WITH READ LOCK bloqueia todas as tabelas. FLUSH TABLES <tables> irá liberar essas tabelas. Há algum bloqueio implícito envolvido nas tabelas de liberação, já que novas gravações não podem ir para uma tabela enquanto ela está sendo liberada, mas esse bloqueio implícito é liberado assim que o flush é concluído.

Se você deseja bloquear tabelas específicas com um bloqueio de gravação, LOCK TABLES <table> WRITE é o que você deseja. Você pode fornecer uma lista de tabelas delimitada por vírgulas aqui. Se você quiser bloquear todas as tabelas, precisará fornecer a lista inteira.

    
por 31.05.2012 / 10:41

Tags