Веб-Мастеру

2 мин для чтенияТранзакции в MySQL с помощью Perl

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

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

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

  • Атомарный: операции с базой данных должны либо все происходить, либо ничего не происходит. Это помогает избежать несогласованности данных путем частичного обновления.
  • Согласованно: убедиться, что транзакция не нарушает ограничения целостности.
  • Изолированный: чтобы убедиться, что изменения, внесенные операцией on, становятся видимыми для других параллельных операций.
  • Долговечность: гарантировать, что совершенные транзакции будут существовать постоянно.

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

  • Установите атрибут AutoCommit в false включения транзакции.
  • Выполните операции в блоке eval, в конце блока eval вызовите метод commit() объекта дескриптора базы данных, чтобы зафиксировать изменения.
  • Проверьте переменную $@ на наличие ошибок и вызовите метод rollback() базы данных, чтобы откатить изменения, если произошла ошибка.

 

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

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

  • Вставьте новую ссылку в таблицу links; получить последний идентификатор вставки вставленной ссылки.
  • Вставьте новый тег в таблицу tags; получить последний идентификатор вставки вставленного тега.
  • Свяжите вставленную ссылку и тег, добавив в таблицу link_tags новую строку  с идентификатором ссылки и идентификатором тега из первой и второй операций.

 

Мы завернем три операции внутри транзакции. Следующий скрипт иллюстрирует обработку транзакции с использованием 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();

 

Читать  4 полезных инструмента командной строки для мониторинга производительности MySQL в Linux

Обратите внимание, что выражение $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 базы данных.

Источник: AndreyEx.ru

Похожие записи

Загрузка ....