Transação Perl MySQL

Resumo : neste tutorial, você aprenderá como lidar com transações de banco de dados usando Perl DBI para garantir a integridade dos dados.

Por definição, uma transação de banco de dados é um conjunto de instruções SQL executadas do modo tudo ou nada. Se todas as instruções SQL forem executadas com sucesso, a transação será considerada bem-sucedida. Uma falha em qualquer instrução SQL fará com que o sistema volte ao seu estado original para evitar inconsistência de dados.

Uma transação de banco de dados deve ser ACID, que é atômica, consistente, isolada e durável:

  • Atômico : todas as operações no banco de dados devem ocorrer ou nada ocorre. Isso ajuda a evitar inconsistência de dados por meio de uma atualização parcial.
  • Consistente : para garantir que a transação não viole as restrições de integridade.
  • Isolado : para garantir que a alteração feita por uma operação se torne visível para outras operações simultâneas.
  • Durável : para garantir que as transações comprometidas sobreviverão permanentemente.

Perl DBI fornece um conjunto de APIs que permite lidar com transações de maneira eficaz. Para lidar com transações em Perl DBI, execute as seguintes etapas:

  • Defina AutoCommito atributo como falsepara ativar a transação.
  • Execute operações em um evalbloco, ao final do evalbloco, chame o  commit()método do objeto handle do banco de dados para confirmar as alterações.
  • Verifique se há erros na variável  $@e chame o  rollback()método do banco de dados para reverter as alterações se ocorrer um erro.

Exemplo de transação Perl MySQL

Neste exemplo, iremos:

  • Insira um novo link na linkstabela; obtenha o último ID de inserção do link inserido.
  • Insira uma nova tag na tagstabela; obtenha o último ID de inserção da tag inserida.
  • Associe o link e a tag inseridos adicionando uma nova linha à  link_tagstabela com o ID do link e o ID da tag da primeira e da segunda operações.
Transação Perl MySQL - Tabelas de exemplo

Envolveremos as três operações dentro de uma transação. O script a seguir ilustra como lidar com a transação usando Perl DBI:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # for say() function

use DBI;

say "Perl MySQL Transaction Demo";

# MySQL database configurations
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

# connect to MySQL database
my %attr = (RaiseError=>1,  # error handling enabled 
	    AutoCommit=>0); # transaction enabled

my $dbh = DBI->connect($dsn,$username,$password, \%attr);

eval{
	# insert a new link
	my $sql = "INSERT INTO links(title,url,target)
		   VALUES(?,?,?)";
	my $sth = $dbh->prepare($sql);
	$sth->execute("Comprehensive Perl Archive Network","http://www.cpan.org/","_blank");
	# get last insert id of the link
	my $link_id = $dbh->{q{mysql_insertid}};

	# insert a new tag
	$sql = "INSERT INTO tags(tag) VALUES(?)";
	$sth = $dbh->prepare($sql);
	$sth->execute('Perl');

	# get last insert id of the tag
	my $tag_id = $dbh->{q{mysql_insertid}};

	# insert a new link and tag relationship
	$sql = "INSERT INTO link_tags(link_id,tag_id)
		VALUES(?,?)";
	$sth = $dbh->prepare($sql);
	$sth->execute($link_id,$tag_id);

	# if everything is OK, commit to the database
	$dbh->commit();
	say "Link and tag have been inserted and associated successfully!";
};

if($@){
	say "Error inserting the link and tag: $@";
	$dbh->rollback();
}

# disconnect from the MySQL database
$dbh->disconnect();Linguagem de código:  Perl  ( perl )

Observe que a  $dbh->{q{mysql_insertid}}expressão retorna o último ID de inserção.

A seguir está a saída do script:

Perl MySQL Transaction Demo
Link and tag have been inserted and associated successfully!

Podemos verificar a transação consultando as tabelas  linkse :tagslink_tags

SELECT * FROM links;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
transação perl mysql - tabela de links
SELECT * FROM tags;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
transação perl mysql - tabela de tags
SELECT * FROM link_tags;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Funciona.

Neste tutorial, mostramos como lidar com transações de banco de dados MySQL em Perl usando os  métodos commit()rollback()do objeto identificador de banco de dados.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *