Поиск по сайту:
Уничтожение одного есть рождение другого (Аристотель).

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

29.11.2019
Учебник. 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 новую строку  с идентификатором ссылки и идентификатором тега из первой и второй операций.
Читать  Как получить текущую дату и время в PostgreSQL?

Транзакции в 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 базы данных.

Читать  Использование логического типа данных MySQL

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Современному пользователю доступен широкий выбор CMS для управления сайтом. Одним…

Спасибо!

Теперь редакторы в курсе.