Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SELECT FOR UPDATE segurando a tabela inteira no MySQL em vez de linha por linha


O nível de isolamento padrão para tabelas InnoDB é leitura repetível. Quando este nível de isolamento está ativo, obtemos o seguinte comportamento (citação de:https://dev.mysql.com/doc/refman/5.5/en/set-transaction.html ):

Em outras palavras:você poderia tentar usar a chave primária na condição WHERE do SELECT? Então, por exemplo, em vez de:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE status='free' limit 8 FOR UPDATE;

Tentar:
START TRANSACTION;
SELECT * FROM productMacAddress WHERE id=10 FOR UPDATE;

caso id seja a chave primária. Qualquer outra coluna com um índice exclusivo também funcionaria. Ao usar colunas não exclusivas em sua cláusula WHERE, o InnoDB bloqueará um intervalo de linhas.