An@mik@ Ответов: 1

Связанные с транзакциями в СУБД


Я знаю теорию транзакций в СУБД.
Но я хочу продемонстрировать концепции сериализации , механизм параллелизма в транзакциях с использованием практических методов.
Например, как в SQL мы можем выполнять различные типы запросов. Как выполнить практическое применение транзакционных концепций в СУБД?

Что я уже пробовал:

Я читаю концепции в книге СУБД и ищу в Google, но не могу найти свои ответы.

1 Ответов

Рейтинг:
7

Afzaal Ahmad Zeeshan

Вот вы идете, переходите по этим ссылкам и изучаете, как они работают—о чем, как вы упомянули, вы уже знаете.

база данных - правильное использование транзакций в SQL Server 2008 - переполнение стека[^]
НАЧАТЬ ТРАНЗАКЦИЮ (Transact-SQL) - SQL Server | Microsoft Docs[^]

Теперь, как вы можете видеть, что а TRANSACTION запрос предоставляет другие предложения и команды SQL, которые можно использовать для управления обработкой транзакции. COMMIT и ROLLBACK позволяет вам контролировать поведение, а также побочные эффекты запросов, которые выполняются а те, что были выполнены Позвольте мне дать вам 2 сценария, которые могут объяснить эти транзакции.

Прежде всего, предположим, что у вас есть система, в которой в любой момент времени подключено по крайней мере более 5 пользователей и работает—5 просто произвольно, это могут быть всего 2 пользователя, которые могут испортить согласованность данных в системе Теперь вы пытаетесь выполнить запрос, скажем, бронирование мест—очень старая школьная проблема в информатике,—но поскольку несколько пользователей пытаются забронировать билеты, может быть шанс, что пользователю 3 было предоставлено 7 мест, и он попытался зарезервировать 4 (осталось 3?), но прежде чем пользователь 3 смог закончить заказ, пользователь 5 забронировал 4 билета (наугад!), а пользователь 3 также(!) подал запрос на 4 билета... Кто и сколько получает билетов? И сколько билетов осталось для других пользователей... Эти проблемы аналогичны условиям гонки в многопоточных средах Вы можете попробовать это с помощью транзакции и убедиться, что только пользователь, который пытался забронировать места первым, получает их, а другие пользователи ждут команды. Да, они ждут. Они не держат стоимость билетов, которые они ищут.

Во-вторых, в свете того, что я только что сказал выше, как должна действовать система баз данных, если она обнаружит, что отклик на значение теперь меньше, чем ожидалось? Например, пользователь хочет 4 места, но в результате получается только 3 места—и предположительно мы уже внесли изменения в одну из таблиц, когда мы проходили транзакцию—система должна сделать что? Транзакция позволит вам контролировать поток. Если все пойдет хорошо,


  1. Вы запросите таблицу билетов и обнаружите, что билеты доступны.
  2. Вы обновляете статус билетов в таблице билетов для продажи.
  3. Вы запросите учетную запись пользователя и обнаружите, что у них недостаточно кредитов.
Обратите внимание, что вышеуказанные случаи могут быть в любом случае (сначала проверка кредита, а затем проверка билета, возможно), и в этих случаях вы используете ROLLBACK чтобы отменить все изменения, или вы COMMIT изменения, чтобы сохранить их в системе.

Вы не можете сделать это и поддерживать это свойство ACID вашей базы данных без использования некоторых внешних служб или языков, таких как поддержка C# или Java. Вы можете сказать, что вы можете только запросить всю информацию и после того, как все ограничения будут выполнены, вы можете обработать ее, но это не гарантирует необходимую блокировку, и в случае, если кто-то другой запросил купить билеты, пока вы держите предыдущую информацию, это то, что мы пытаемся игнорировать здесь.

Такие же концепции поддерживаются и другими реляционными базами данных, такими как Oracle, MySQL и т. д. Вы должны проверить их документацию, чтобы увидеть, какая из них применима к вашей системе баз данных.