Qual a melhor forma de fazer um Insert em um Banco?
4 respostas
T
teteorp
Olá pessoal.
Tenho um programa que precisa inserir um registro no banco. Simples, aparentemente. Mas me deparei com uma questao. Qual o mais interessante(correto, ou menos problematico) de se fazer ???
Eu devo fazer uma verificação se o CPF do individuo, por exemplo, ja existe na tabela (1 conexão) e depois fazer o insert (outra conexão) dependendo da verificação(caso nao exista)??
Eu faço a verificação do CPF e, se nao existe, e faço o insert. Tudo isso usando a mesma conexão.
Eu faço o insert direto e deixo o banco fazer a consistencia da Primary Key, uma vez que o CPF do individuo eh a PK da tabela.
opção deixe o banco fazer a verificação de PK!! se eh pra vc ficar verificando pra que inventaram a PK entao!!!
T
thingol
Deixar o banco checar (opção 3) é a maneira mais rápida e mais correta.
Se sua aplicação compete com outras pelo uso do mesmo banco, checar se o CPF não existe para então inserir vai dar um SQLException do mesmo jeito - pode ser que alguém insira os dados entre o teste da existência e a inserção, e então a PK vai ser violada do mesmo jeito. O problema é que se você simplesmente não tratar a violação da PK porque você "jura que nunca isso vai acontecer’, acaba acontecendo, normalmente em produção (em desenvolvimento essas coisas nunca acontecem…)
NoodleZ
Concordo com as duas passagens acima de que a opção 3 eh a melhor, mas voce pode fazer a verificação por uma stored procedure que faz a verificação do CPF antes de chamar o método insert. Assim voce faz um lock na tabela antes de verificar e inserir.
Voce pode fazer uma procedure responsável só por isso (verificacao de CPF) e utilizá-la em qualquer procedure que voce venha a precisar e ainda na propria aplicação.
Essa seria então uma opção 4 pra você.
Abraços
Gabriel Thiesen
Z
ZehOliveira
Travar a tabela toda só pra garantir que ninguém vai inserir algo antes de você? :mrgreen: Não deixe o DBA saber que você pretende fazer isso.
Tente inserir, caso ocorra uma exceção (já exista, por exemplo), trate da maneira devida.