Em primeiro lugar, 1 thread selecionando uma grande quantidade de dados de uma tabela.
Então, antes que a consulta SELECT ainda não tenha terminado, outro thread exclui os dados dessa tabela.
Isso faz com que a consulta SELECT falhe com o erro errorCode=1205 sqlState=40001 e a mensagem de que ocorreu um impasse.
Eu pensei que a segunda transação deve esperar até que a primeira seja concluída, ou a primeira transação deve retornar dados sem as alterações feitas pela segunda transação. Como posso evitar isso?
Não posso alterar a ordem das transações ou controlá-las de alguma forma (existem muitos usuários do aplicativo e eles podem fazer o que quiserem em qualquer ordem a qualquer momento). Por que isso acontece?
É assim que as consultas se parecem (eu as ofusquei um pouco):
SELECT distinct P.pID, (LastNAME+' '+FirstName+' '+SurName) as NAME, 'person' as Type, CA.OrgName, PC.personemail as Email
FROM Persons P
INNER JOIN WORK PW ON (P.mainwork = PW.pwId)
INNER JOIN CONTACT PC ON (PC.pID = P.pID)
LEFT OUTER JOIN ORG CA ON (CA.orgId = PW.orgId)
WHERE (P.Status = ?)
e
DELETE FROM persons WHERE id = 1234