Понимание свойств ACID в контексте транзакций базы данных

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

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

Свойства КИСЛОТЫ

Транзакции базы данных должны соответствовать так называемым свойствам ACID. Такие системы называются транзакционными и гарантируют, что каждая операция, включая чтение, запись или обновление, соответствует свойствам ACID. Акроним ACID расшифровывается как Atomiciy, Cconsistency, Isolation и Durability.

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

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

Изоляция. Система транзакционной базы данных позволяет нескольким пользователям взаимодействовать с ней одновременно. Это свойство гарантирует, что одновременные транзакции, инициированные несколькими пользователями, не будут мешать друг другу, что позволит сохранить целостность данных. Таким образом, любая операция внутри одной транзакции не будет видна вне этого контекста, пока транзакция не будет зафиксирована.

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

Как писать транзакции в SQL

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

В приведенном ниже примере мы создаем транзакцию, состоящую из двух операторов. Первый оператор вставит новую запись в таблицу mydataset.mytable, в то время как второй оператор (преднамеренно) вызовет ошибку, поскольку пытается выполнить деление на ноль.

Во второй части нашего фрагмента кода мы определяем журнал отката, который отменит все изменения, сделанные до сбоя. Поскольку оператор SELECT 1/0 вызовет исключение, оператор INSERT INTO будет отменен, и новая запись не будет добавлена ​​в целевую таблицу.

BEGIN

  BEGIN TRANSACTION;

  INSERT INTO mydataset.mytable VALUES (1, 100, 'pending');

  -- Raise an exception by attempting a division by zero 
  SELECT 1/0;

  COMMIT TRANSACTION;

  EXCEPTION WHEN ERROR THEN
    -- Roll back the transaction if an exception is raised
    SELECT @@error.message;
    ROLLBACK TRANSACTION;
END;

Последние мысли

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

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

👉 Стань участником и читай все истории на Medium. Ваш членский взнос напрямую поддерживает меня и других писателей, которых вы читаете. Вы также получите полный доступ ко всем историям на Medium.



👇Похожие статьи, которые вам также могут понравиться👇