Оригинальная ссылка: https://blog.ouyangsihai.cn/ >>Транзакции MySQL, этой статьи достаточно
Прежде чем читать эту статью, давайте рассмотрим предыдущую серию статей о MySQL, которая должна помочь вам прочитать следующие статьи.
- Сравнение InnoDB и MyISAM и других механизмов хранения
- Интервьюер спрашивает вас о B-деревьях и B+-деревьях, киньте ему эту статью
- Концепция, использование, оптимизация и сценарии использования индекса дерева B+ MySQL.
- Самый сильный учебник по полнотекстовому индексу MySQL
- Еще один артефакт MySQL — блокировка, необходимая для собеседований по MySQL.
0 Что такое транзакция
СделкаЭто базовая единица управления параллелизмом. Так называемая транзакция, это последовательность операций, эти операции либо выполняются, либо не выполняются, это неделимая единица работы. Транзакция — это единица, с помощью которой база данных поддерживает согласованность данных, и в конце каждой транзакции может поддерживаться согласованность данных.
В то же время транзакции строго определены и должны соответствовать четырем характеристикам, о чем мы и говорили про ACID.Однако это не означает, что различные базы данных должны соответствовать четырем характеристикам.Для реализации разных баз данных в разных степень может не полностью соответствовать требованиям.Например, для базы данных Oracle уровень изоляции транзакций по умолчаниюREAD COMMITTED
, не соответствует требованиям изоляции.
Давайте ковать железо, пока горячо, и представить четыре основных характеристики деловых отношений. Эти характеристики также присутствуют в интервью. Когда интервьюер опрашивает соответствующие знания MySQL, он задает больше вопросов. Следовательно, эти характеристики должны быть. понял и досконально помнил, шучу, попал под поезд и не должен забывать эти четыре характеристики!
1 Четыре характеристики транзакций
Четыре характеристики транзакций называются:ACID
, соответственноАтомарность, согласованность, изоляция и долговечность.
Давайте представим их один за другим.
- атомарность
Атомарность относится к тому факту, что вся транзакция базы данных представляет собой неделимую единицу работы, каждая из которых должна быть атомарной операцией.
Когда мы выполняем транзакцию, если одна операция в серии операций завершается с ошибкой, то все операции в этой транзакции должны быть восстановлены до состояния, предшествующего выполнению транзакции, что является атомарностью транзакции.
Вот простой пример.
i++;
Простейший код выше часто спрашивают, это атомарная операция? Это определенно не так, если мы поместим этот код в транзакцию, скажем, когдаi+1
При возникновении проблемы откатывается весь код i++ (i = i + 1), поэтому значение i после отката не изменится.
Это концепция атомарности.
- последовательность
последовательностьЭто означает, что транзакция изменяет базу данных из одного состояния в следующее согласованное состояние, то есть до и после выполнения транзакции два состояния должны быть одинаковыми, то есть ограничения целостности базы данных не будут нарушены.
Кроме того, необходимо обратить внимание на последовательность, чтобы не обращать внимание на промежуточное состояние, такое как процесс банковского перевода, вы передаете его другим, что касается среднего состояния, у вас меньше 500, он 500, эти промежуточные состояния не затрагиваются, если больше. Промежуточное состояние вторичной передачи также невидимо, и видно только последнее успешное или неудачное состояние.
Если есть проблема распределенной согласованности, ее можно разделить на сильную согласованность, слабую согласованность и конечную согласованность, очень интересно проверить эти понятия самостоятельно.
- изоляция
Мы можем запустить много транзакций.В базе данных MySQL может быть запущено много транзакций одновременно.Однако транзакции и транзакции отделены друг от друга, то есть они не влияют друг на друга.Это транзакцияизоляция.
- Долговечность
бизнесУпорствоЭто означает, что после совершения транзакции она становится постоянной, и даже в случае возникновения проблемы базу данных можно восстановить. Следовательно, долговечность гарантирует высокую надежность транзакций.
2 Классификация сделок
Сделки можно разделить на множество типов, которые обычно делятся на:плоские транзакции, плоские транзакции с точками сохранения, цепные транзакции, вложенные транзакции, распределенные транзакции.
фиксированная сделка
Плоская транзакция — самая простая, а также наиболее часто используемая транзакция в реальной разработке. В такого рода транзакциях все операции находятся на одном уровне, наиболее распространенный способ следующий:
BEGIN WORK
Operation 1
Operation 2
Operation 3
...
Operation N
COMMIT WORK
Например
begin work;
select * from user;
update user set name = 'sihai' where id = 1;
commit work;
основные плоские сделкинедостатокЧасть транзакции нельзя зафиксировать, откатить или зафиксировать в несколько отдельных шагов.
Плоские транзакции с точками сохранения
В дополнение к поддержке операций, поддерживаемых фиксированными транзакциями, самая большая разница между этой транзакцией и фиксированной транзакцией заключается в том, чтоПозволяет откатиться к более раннему состоянию в той же транзакции во время выполнения транзакции, это связано с тем, что ошибки, которые могут возникнуть во время выполнения некоторых транзакций, могут быть недействительны для всех операций, отказ от всей транзакции не является удовлетворительным, а накладные расходы слишком велики.точка сохраненияИспользуется для информирования системы о том, что текущее состояние транзакции следует запомнить, чтобы транзакция могла вернуться к этому состоянию в случае более поздней ошибки.
Например
begin work;
select * from user;
savepoint t1;
update user set name = 'sihai' where id = 1;
savepoint t2;
commit work;
С помощью вышеуказанного метода мы установили две точки сохранения t1 и t2, черезROLLBACK TO SAVEPOINT t1
, мы можем вернуться к保存点t1
.
цепная сделка
Связанные транзакции: при фиксации транзакции освобождайте ненужные объекты данных и неявно передайте необходимый контекст обработки следующей транзакции для запуска. Обратите внимание, что операция фиксации транзакции и операция следующей транзакции будут объединены в одну.атомарная операция, то есть следующая транзакция может видеть результат предыдущей транзакции.
Цепная транзакция означает, что при откате может быть восстановлена только самая последняя точка сохранения, в то время как плоская транзакция с точкой сохранения может быть отброшена к любой правильной точке сохранения.
Например
begin work;
select * from user;
savepoint t1;
update user set name = 'sihai' where id = 1;
savepoint t2;
commit work;
Это тот же пример, но для цепных транзакций нельзя откатиться напрямую к точке сохранения t1, и можно восстановить до самой последней точки сохранения t2; кроме того, мытребует вниманиятранзакция цепочки снимет все блокировки, удерживаемые текущей транзакцией, после выполнения фиксации, а плоская транзакция с точкой сохранения не повлияет на удерживаемые блокировки.
вложенные транзакции
Транзакция вложена в транзакцию.Эта структура немного похожа на горизонтальную древовидную структуру.Транзакция в корневом узле называется транзакцией верхнего уровня. Предшественники транзакции называются родительскими транзакциями, а другие транзакции называются дочерними транзакциями. Предшественник транзакции называется родительской транзакцией, а следующий уровень транзакции называется дочерней транзакцией.
Дочернюю транзакцию можно зафиксировать или откатить, но ее операция фиксации не вступает в силу немедленно, если ее не зафиксирует родительская транзакция. Следовательно, можно определить, что любые подтранзакции фактически фиксируются после фиксации транзакции верхнего уровня. Точно так же откат любой транзакции приведет к одновременному откату всех ее подтранзакций.
BEGIN WORK
SubTransaction1:
BEGIN WORK
SubOperationX
COMMIT WORK
SubTransaction2:
BEGIN WORK
SubOperationY
COMMIT WORK
...
SubTransactionN:
BEGIN WORK
SubOperationN
COMMIT WORK
COMMIT WORK
Распределенная транзакция
Распределенные транзакции обычно относятся к одноуровневым транзакциям, которые выполняются в распределенной среде, поэтому в зависимости от того, где находятся данные, требуется доступ к разным узлам в сети.
По разным физическим адресам через доступ к сети выполняются разные транзакции, что является распределенной транзакцией.
3 Использование транзакций
Прежде всего, в этой части давайте представим операторы этих транзакций. Их не так много, и использование не сложно. Давайте воспользуемся таблицей для их организации.
Уведомление:
COMMIT
иCOMMIT WORK
Разница между операторами заключается в том, что COMMIT WORK используется для управления поведением после завершения транзакции.CHAIN
все ещеRELEASE
, если это CHAIN, то транзакцияцепная сделка.
Пользователь может передавать параметрыcompletion_type
контроль следующим образом:
- завершение_тип = 1 экземпляр
Сделайте следующее;
SET @@completion_type = 1;
BEGIN WORK;
INSERT INTO lock_test SELECT 10;
COMMIT WORK;
Затем выполняем следующие операции;
INSERT INTO lock_test SELECT 115;
ROLLBACK;
SELECT * FROM lock_test;
Мы сначала вставляем кусок данных 115, а потом откатываем его.Мы знаем, что если его нет в транзакции, то 115 должно быть вставлено успешно, даже если мы откатимся, но здесь, после отката, результаты запроса такие следующее:
В это время записи 115 нет, то есть вступает в силу откат, свидетельствующий о том, что вCOMMIT WORK
После этого это новая транзакция, поэтому появится этот результат.
- завершение_тип = 2 экземпляра
Сначала делаем следующее;
SET @@completion_type = 2;
BEGIN WORK;
INSERT INTO lock_test SELECT 5;
COMMIT WORK;
Мы зафиксировали транзакцию выше. Когда мы используем следующий оператор для запроса данных lock_test, появится **отключение**.
SELECT * FROM lock_test;
4 Уровень изоляции транзакции
Существует четыре уровня изоляции транзакций:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
Чтобы узнать о проблемах и кратком изложении этих уровней изоляции, вы можете проверить эту статью:Еще один артефакт MySQL — блокировка, необходимая для собеседований по MySQL.
5 Резюме
В этой статье представлено содержимое транзакций базы данных MySQL из следующего содержимого, а более подробное содержание другого содержимого будет объяснено в последующих статьях.
- концепция
- Тип операции
- Транзакционное использование
- уровень изоляции транзакций
Если в статье есть что-то неуместное, поправьте меня, если вам нравится читать в WeChat, вы также можете подписаться на меня.Публичный аккаунт WeChat:
好好学java
, доступ к высококачественным учебным ресурсам.Эта статья опубликована в блогеOpenWriteвыпуск!