ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Транзакции в MySQL с помощью Perl

Учебник. MySQL и Perl

Описание: в этой статье вы узнаете, как обрабатывать транзакции базы данных, используя Perl DBI для обеспечения целостности данных.

По определению, транзакция базы данных – это набор операторов SQL, который выполняется способом «все или ничего». Если все операторы SQL выполнены успешно, транзакция считается успешной. Сбой любого оператора SQL приведет к откату системы до исходного состояния, чтобы предотвратить несогласованность данных.

Транзакция базы данных должна быть ACID, которая является атомарной, последовательной, изолированной и долговечной:

Perl DBI предоставляет набор API, который позволяет вам эффективно работать с транзакциями. Для обработки транзакций в Perl DBI вы делаете следующие шаги:

 

Пример транзакции Perl MySQL

В этом примере мы будем:

Транзакции в MySQL с помощью Perl

 

Мы завернем три операции внутри транзакции. Следующий скрипт иллюстрирует обработку транзакции с использованием Perl DBI:

#!/usr/bin/perl
use strict;
use warnings;
use v5.10; # для функции say()

use DBI;

say "Демонстрация транзакций в MySQL с помощью Perl";

# Конфигурация баз данных MySQL
my $dsn = "DBI:mysql:perlmysqldb";
my $username = "root";
my $password = '';

# Подключение к базе данных MySQL
my %attr = (RaiseError=>1,  # включена обработка ошибок
AutoCommit=>0); # транзакция включена

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

eval{
# вставить новую ссылку
my $sql = "INSERT INTO links(title,url,target)
VALUES(?,?,?)";
my $sth = $dbh->prepare($sql);
$sth->execute("IT Блог. Администрирование серверов на Основе Linux","https://andreyex.ru/","_blank");
# получить последний идентификатор ссылки вставки
my $link_id = $dbh->{q{mysql_insertid}};

# вставить новый тег
$sql = "INSERT INTO tags(tag) VALUES(?)";
$sth = $dbh->prepare($sql);
$sth->execute('Perl');

# получить последний идентификатор вставки тега
my $tag_id = $dbh->{q{mysql_insertid}};

# вставка новой связи между ссылкой и тегом
$sql = "INSERT INTO link_tags(link_id,tag_id)
VALUES(?,?)";
$sth = $dbh->prepare($sql);
$sth->execute($link_id,$tag_id);

# если все в порядке, зафиксируйте в базе данных
$dbh->commit();
say "Ссылка и тег были вставлены и успешно связаны!";
};

if($@){
say "Ошибка при вставке ссылки и тега: $@";
$dbh->rollback();
}

# отключитесь от базы данных MySQL
$dbh->disconnect();

 

Обратите внимание, что выражение $dbh->{q{mysql_insertid}} возвращает идентификатор последней вставки.

Ниже приведен вывод сценария:

Демонстрация транзакций в MySQL с помощью Perl
Ссылка и тег были вставлены и успешно связаны!

 

Мы можем проверить транзакцию, запрашивая таблицы links, tags и  link_tags:

SELECT * FROM links;

 

SELECT * FROM tags;
SELECT * FROM link_tags;

Все работает.

В этой статье, мы показали вам, как для обработки транзакций базы данных MySQL в Perl, используя методы commit() и rollback() объекта handle базы данных.

Exit mobile version