Подробное объяснение: четыре характеристики ACID транзакций в MySQL.
Подробное объяснение: четыре характеристики ACID транзакций в MySQL.

Мой публичный аккаунт: Грузчик кирпичей на Гаитянской 2-й дороге

введение

В MySQL,Характеристики ACID (амарность, согласованность, изоляция, долговечность) являются четырьмя столпами обеспечения точности и надежности данных. Вместе эти принципы составляют краеугольный камень управления делами.,Это гарантирует, что наши данные не просто хранятся,Это безопасно, точно и надежно. В этой статье вы просто и подробно изучите принципы ACID в MySQL.,показать, как они работают вместе,Обеспечить работоспособную работу базы данных.

Введение в свойства ACID

  • атомарность
    • дела рассматриваются как неделимая наименьшая единица,он либо полностью выполняется,Или не делайте этого вообще.
  • Последовательность
    • последовательность Гарантированодела Выполнение базы данных из одного согласованного состояния в другое согласованное состояние.。
  • Изоляция
    • Изоляцияозначает, когда несколькодела При одновременной работе с базой данных,Каждое дело независимо,Работа одних дел не повлияет на другие дела.
  • Долговечность
    • Долговечность означает, что как только дело будет совершено,Его изменения в базе данных являются постоянными.,Даже если система выйдет из строя, она не будет потеряна.

Подробное объяснение атомарности

атомарность(Atomicity)Определение и значение

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

Пример атомарности транзакции

Предположим, что в транзакции банковского перевода вам необходимо перевести средства со счета А на счет Б.

Эта транзакция состоит из двух шагов:

  • Шаг 1. Вычтите соответствующую сумму со счета А.
  • Шаг 2: Добавьте соответствующую сумму на счет Б.

Атомарность гарантирует, что обе операции либо завершатся успешно, либо потерпят неудачу одновременно. Если при добавлении суммы на счет Б после списания суммы произойдет ошибка, вся транзакция будет отменена, а сумма на счете А будет восстановлена.

MySQLреализовано вделаатомарностьмеханизм(Redo Log и Undo Log

MySQL достигает атомарности транзакций за счет использования файлов журналов.

  • Очистка журнала
    • Когда транзакция начнется, InnoDB присвоит транзакции уникальный идентификатор и начнет записывать журналы повторов и журналы отката. По мере выполнения дела все изменения данных сначала будут записываться в буфер журнала повторов, а затем в соответствующее время эти изменения будут сброшены в файл повторов на диске. журналсередина. Если система выйдет из строя,Журнал повторов будет использоваться для повтора дел.,Убедитесь, что изменения дела применены к базе данных.
  • Redo Log
    • Если во время выполнения происходит ошибка или сбой системы, если изменения данных были записаны в буфер журнала повторов, эти изменения будут сброшены в буфер журнала повторов в соответствующее время (при восстановлении системы). журналасередина。
  • Undo Log
    • Если во время выполнения дела произошла ошибка или сбой системы,и не могу пройти**Redo Log** Гарантия целостности данных,MySQL будет использовать журнал для отката всех операций в делах,Убедитесь, что атомарность базы данных не нарушена.

Подробное объяснение консистенции

Конкретное значение последовательности

последовательностьв базе данныхделауправлятьсерединаотносится кдела Переместить базу данных из одного согласованного состояния в другое согласованное состояние.。это означаетдела Результаты выполнения должны соответствовать всем заранее заданным правилам.иограничение,Включает внутренние правила для базы данных.(Например, первичный ключ、ограничения внешнего ключа、ограничения уникальности и т. д.) и бизнес-правила уровня приложения.

последовательностьгарантировал, что данныеточныйсексиэффективныйсекс,Предотвращает конфликты данных и логические ошибки.

Пример согласованности

В случае банковского перевода,Предположим, что пользователь A и пользователь B изначально тратят по 100 долларов каждый.,Пользователю А необходимо перевести 100 долларов США пользователю Б.

Эта операция включает в себя два шага: списание 100 долларов США со счета пользователя А и добавление 100 долларов США на счет пользователя Б.

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

Стратегия MySQL для обеспечения согласованности данных

MySQL обеспечивает согласованность данных с помощью нескольких механизмов:

  1. Ограничения:MySQLпозволятьопределить различныеограничение(Например, первичный ключограничение、ограничения внешнего ключа、толькоограничениеждать),Эти ограничения действуют непосредственно на таблицу данных.,обеспечить данныечестностьипоследовательность。
  2. Уровни изоляции транзакций:MySQLпредоставлять различныеделауровень изоляции,включать Читать незафиксированные、Чтение зафиксировано、Повторяемое чтениеи Сериализуемый。по разумному выборуделауровень изоляции,Может эффективно поддерживать данные в параллельной средепоследовательность。
  3. Запирающие механизмы:MySQLИспользуйте механизмы блокировки для управления одновременным доступом к данным.,включатьблокировка уровня строки(Row-Level блокировки), блокировки уровня таблицы (Table замки) и т.д.,чтобы обеспечить параллелизмделасерединаданныепоследовательностьичестность。
  4. атомарностьоперация (Atomic Operations):MySQLпроходитьатомарность Обеспечение эксплуатацииделасередина Все операции либо успешны,или все провалится,чтобы сохранить данныепоследовательность。

Подробное объяснение долговечности

Определение и значение настойчивости

Долговечность означает, что после фиксации транзакции ее изменения в базе данных должны быть постоянными, даже если произойдет сбой системы или другой сбой.

Долговечность обеспечивает надежность и стабильность данных.,Это одна из основных функций системы управления базами данных (СУБД). Для любого бизнеса критично,Сохранение данных имеет важное значение,Потому что это обеспечивает безопасность и согласованность данных.,Данные не теряются даже в случае сбоя в системе.

Технология обеспечения сохранности данных в MySQL

1. Файлы журналов

  • Журнал повтора:InnoDBМеханизм хранения использует журналы повторного выполнения, чтобы гарантироватьделадлительныйсекс。когдаделакогда отправлено,Все изменения, внесенные делами, будут зафиксированы в журнале повторов. Даже если база данных выйдет из строя,Журналы повторов также можно использовать для воспроизведения этих изменений после перезапуска.,Обеспечьте долговечность данных.
  • Двоичный журнал:MySQLСервер использует двоичные журналы для записи всех операций, изменяющих данные базы данных.,нравитьсяINSERTUPDATEDELETEждать。Двоичные журналы важны не только для восстановления данных.,Слишкомкопироватьиинкрементное резервное копированиеоснова。

2. Стратегия резервного копирования

  • Полное резервное копирование:Выполняйте регулярное полное резервное копирование всей базы данных.,Чтобы обеспечить долговечность и возможность восстановления данных.
  • инкрементное резервное копирование:Резервное копирование только тех данных, которые изменились с момента последнего резервного копирования.。и Полное резервное Использование в сочетании с копированием позволяет эффективно сократить время восстановления данных и требования к их хранению.
  • Восстановление на определенный момент времени (PITR):Реализовано с использованием двоичных журналов.,Возможность восстановить базу данных до ее состояния на определенный момент времени.,Идеально подходит для устранения ошибок в работе или повреждения данных.

Изоляция

Определение изоляции

Изоляция гарантирует, что одновременно выполняемые дела изолированы, то есть выполнение одних дел не будет мешать другим делам.

Эта функция реализована через уровень изоляции дела.,Различные уровни изоляции могут решить разные проблемы параллелизма.,Но в то же время это будет такжесексспособныйипоследовательностьпойти на компромисс между。

Роль и уровень изоляции

Основная роль изоляции заключается в контроле видимости между транзакциями, то есть влияния одной транзакции на другие транзакции. Стандарт SQL определяет четыре уровня изоляции:

  1. Читать незафиксированные:самый низкийуровень изоляции,Позволяет делам считывать изменения, которые не были совершены другими делами. Это может привести к «грязному чтению».,То есть считываются данные, которые не были предоставлены другими делами.
  2. Чтение зафиксировано:позволятьдела Читайте и читайте только то, что использовалось другимидела Зафиксировать изменения。Этого уровня можно избежатьгрязное читаю, но все же можно встретить "неповторяющееся чтение”вопрос,то есть в тех же делах,Чтение одного и того же набора данных несколько раз может дать разные результаты.
  3. Повторяемое чтение:Убедитесь, что то же самоеделасередина При чтении одного и того же набора данных несколько раз,Результаты согласуются,избегалнеповторяющееся проблема с чтением. Однако он может столкнуться с «фантомным чтение”,т. е. когда другие дела вставляют или удаляют строку,Последующие запросы текущих дел «увидят» новые строки.
  4. Сериализуемый:самый высокийуровень изоляции,Принуждая дела к серийному исполнению,Избежал проблем грязного чтения, неповторяющегося чтения, фантомного чтения. Это обеспечивает самую надежную гарантию согласованности,Но накладные расходы на производительность также являются самыми большими.

Реализация и применение уровня изоляции в MySQL

MySQL по умолчанию использует уровень изоляции «Повторяемое чтение», который отличается от стандарта SQL (уровень изоляции по умолчанию стандарта SQL — «фиксация чтения»). MySQL позволяет избежать проблемы фантомного чтения с помощью механизма управления многоверсионным параллелизмом (MVCC) на уровне «повторяемого чтения», что обычно возможно только на уровне «сериализации» в других системах баз данных.

В MySQL вы можете просмотреть или установить уровень изоляции транзакции с помощью следующих команд:

Язык кода:javascript
копировать
SHOW VARIABLES LIKE 'transaction_isolation';
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

Как изоляция решает проблемы в параллельных транзакциях

  • грязное чтение:проходить“прочитать фиксацию”Избегайте уровней и выше,Потому что для других дел видны только совершенные изменения.
  • неповторяющееся чтение:проходить“повторяемое чтение”Избегайте уровней и выше,потому что Гарантированов том жедела При чтении одного и того же набора данных несколько раз в течениепоследовательность。
  • фантомное чтение:В большинстве систем баз данныхсередина,Избегается уровнем «сериализации»,Потому что дела выполняются поочередно,Проблем с параллелизмом нет. И в MySQL,Частичного фантомного чтения можно избежать с помощью механизма MVCC даже на уровне «повторяемого чтения».

уровень изоляции Выбор должен быть в данныхпоследовательностьнуждатьсяисистемасексспособныйпойти на компромисс между。вышеуровень изоляции Может предоставить более достоверные данныепоследовательностьгарантировать,Но это может снизить производительность параллелизма системы. поэтому,Выбор подходящего уровня изоляции должен определяться на основе конкретного сценария приложения и требований к производительности.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose