mysql índice único utilizado como método de tratamento de excepções em java
-
06-07-2019 - |
Pergunta
Eu quero saber se é uma boa idéia para exceção captura com base no índice exclusivo do SQL em Java.
Eu quero pegar uma exceção como 'entrada duplicada para 1-0' Se sim, então lidar com exceção de outra forma inserir corretamente na tabela de banco de dados?
Solução
Eu digo que você não faça isso, por duas razões:
- as mensagens de erro são um pouco claro: ERRO 1062 (23000): Duplicate entry 'xxx' para a chave 1 . Você é sempre 100% de certeza que chave é 1?
- encaixar em você para um fornecedor de banco de dados específico
Acho que é mais simples de transactionally :
- verificação da existência de linha;
- lançar uma exceção se a linha já existe;
- inserir a nova linha.
problemas Desempenho :
Eu digo medida duas vezes, corte uma vez . Perfil o uso para o seu caso de uso específico. Topo da minha cabeça, eu diria que o desempenho não será um problema, exceto para os cenários de uso pesado db.
A razão é que uma vez que você executar uma SELECT
sobre essa linha específica, seus dados serão colocados nos caches de banco de dados e imediatamente usado para verificação de inserção feita no índice para a instrução INSERT
. Também tendo em mente que este acesso é apoiado por um índice leva à conclusão de que o desempenho não será um problema.
Mas, como sempre, fazer medida.
Outras dicas
Eu não vejo por que não. Provavelmente é mais eficiente do que executar uma consulta antes da inserção. É provavelmente melhor para pegar o código de erro da exceção em vez de reconhecer a mensagem de erro, no entanto.
Você pode usar o comando REPLACE. Ele insere atualizações / baseados na existência do registro. E sua atômica também enquanto consulta, em seguida, inserir / atualizar não é. Depende do que você quer fazer se você detectar a violação de chave?