Поиск по сайту:
Счастье — как здоровье, когда его не замечаешь, значит, оно есть (И. Тургенев).

Транзакции в 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 новую строку  с идентификатором ссылки и идентификатором тега из первой и второй операций.
Читать  Как установить и использовать MySQL Workbench в Ubuntu

Транзакции в 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 для управления сайтом. Одним…

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: