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

André Garcia Carneiro andre.garcia.carneir em terra.com.br
Terça Outubro 24 14:14:57 PDT 2006


Se o seu mysql for 4x, então ele suportará transações, mas somente com tabelas InnoDB. Não sei os detalhes
desse tipo de coisa, mas sei que funciona. Não sei fazer isso diretamente via SQL, mas o phpmyadmin muda isso,
vc escolhe uma tabela e clica no link "Operações". É bem mais rápido do q caçar SQLs... :), embora não muito
aconselhável, devo dizer.

Se quiser testar com o DBI, inicie a conexão setando o Autocommit = 0, através do método
DBI->connect(<parâmetros de conexão>,{AutoCommit=>0});
depois utilize os métodos de transação - $dbh->begin_work, $dbh->commit e $dbh->rollback;

E não se esqueça do bom e velho RTFM, para tirar possíveis dúvidas...
http://search.cpan.org/~timb/DBI-1.52/DBI.pm    ou se você tiver os manuais instalados abra um terminal e
digite:  perldoc DBI

Cheers!

---------- Cabeçalho original -----------

De: cascavel-pm-bounces+andre.garcia.carneir=terra.com.br em pm.org
Para: "Cascavel Perl Mongers" cascavel-pm em pm.org
Cópia: 
Data: Tue, 24 Oct 2006 14:09:59 -0200
Assunto: Re: [Cascavel-pm] Como verificar se um registro já existe antes de inserir no banco? - RESOLVIDO

> 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?
> 
> []s
> 
> -- 
> Murilo Opsfelder Araújo
> Linux User #391561
> ./murilo --opsfelder='araujo'
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
> 
> E-mail classificado pelo Identificador de Spam Inteligente Terra.
> Para alterar a categoria classificada, visite
>
http://mail.terra.com.br/protected_email/imail/imail.cgi?+_u=andre.garcia.carneir&_l=1,1161706267.930754.4993.ambrose.hst.terra.com.br,5273,Des15,Des15
> 
> Esta mensagem foi verificada pelo E-mail Protegido Terra.
> Scan engine: McAfee VirusScan / Atualizado em 23/10/2006 / Versão: 4.4.00/4879
> Proteja o seu e-mail Terra: http://mail.terra.com.br/
> 
> 

--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org



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