[Cascavel-pm] Como verificar se um registro já existe antes de inserir no banco? - RESOLVIDO

Luis Motta Campos luismottacampos em yahoo.co.uk
Terça Outubro 24 15:08:06 PDT 2006


Murilo Opsfelder Araújo wrote:
> On 10/24/06, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
>>   Murilo, seu único problema é a forma: esta é decididamente a mais
>> dispendiosa de todas.
>>
>>   Tenta com este esquema:
>>
>>   eval{
>>     $dbh->begin_work; # apenas se seu DBD suportar transações
>>     # repita o ciclo prepare-execute tantas vezes quantas precisar
>>     $sth = $dbh->prepare( $insert_statement );
>>     $sth->execute( @parameters );
>>     # commit da operação toda
>>     $dbh->commit; # apenas se seu DBD suportar transações
>>   } or do{ # tratamento de erro, executado apenas se o eval() falhar
>>     # Começa sempre tentando fazer rollback.
>>     UNIVERSAL::can( $dbh, 'rollback' ) && $dbh->rollback;
>>
>>     # em segundo lugar, tratamos o erro, que está registrado em $@
>>     print STDERR "Problema com a inserção: $@.\n\n";
>>
>>     # se for necessário, tenta outra coisa qualquer aqui.
>>     # inserir outro registro, chutar o usuário, o que quiser...
>>   }
>>
>>   Como é simples de ver, isto é bem mais curto e simples do que o seu
>> esquema, e deve funcionar bem (atenção: eu não testei este código).
>>
>>   Se você tiver perguntas, ou quiser que eu reescreva seu exemplo todo
>> para este formato, como exemplo, por favor responda a esta mensagem.
> 
> Eu não sei se o meu MySQL server suporta transações. Nem sei como
> utilizar esse recurso. Pelo que percebi, preciso estudar mais o banco
> de dados primeiro, e concomitantemente, Perl.
> 
> Essa transação é para garantir a inserção? Ou pode garantir qualquer outro SQL?

  Normalmente, utiliza-se transações em bancos de dados para garantir
que CONJUNTOS de operações aconteçam todas, ou que nenhuma delas aconteça.

  Isto quer dizer que podemos aplicar transações em UPDATE, DELETE,
INSERT e qualquer combinação destas operações.

  Note que definir, alterar ou eliminar tabelas não são consideradas
operações no sentido de permitir transações. Isto normalmente acontece
"a sêco" e é o tipo de coisa que motiva empresas a contratarem DBAs bem
pagos para operar bases de dados, especialmente as consideradas vitais
para o negócio.

  Putamplexos!
-- 
Luis Motta Campos
Senior System Engineer at Segula.FR
Hobbyist Cooker and Photograph


Mais detalhes sobre a lista de discussão Cascavel-pm