SQLite - トランザクション:入門ガイド

こんにちは、未来のデータベースの魔法使いさんたち!今日は、SQLiteのトランザクションの世界に興味深い旅をすることになります。プログラミングが初めてであっても心配しないでください。私はあなたの親切なガイドとして、ステップバイステップですべてを説明します。このチュートリアルの終わりには、プロのようにトランザクションを扱うことができるでしょう!

SQLite - Transactions

トランザクションとは?

銀行で、預金口座から当座口座に送金を行っているとしましょう。預金口座からお金が消えて、当座口座に現れないことがあってはならないでしょう?それがトランザクションの役割です。データベースの用語では、トランザクションは完全に実行されるか、一切実行されない単位の作業です。

トランザクションの特性

トランザクションにはACIDという略語で覚えやすい4つの主要な特性があります。これらを分解してみましょう。

1. 原子性(Atomicity)

原子性は「全部か全く無し」を意味します。トランザクション内のすべての操作が成功するか、またはどれも成功しません。サンドイッチを作るのと同じで、すべての材料が揃っているか、またはサンドイッチを作らないです。

2. 一貫性(Consistency)

一貫性は、トランザクションがデータベースを一つの有効な状態から別の一つの有効な状態に移行することを保証します。レシピに従うのと同じで、材料から始めて完成した料理に終わります。半分のままのものにはなりません。

3. 非干渉性(Isolation)

非干渉性は、同時に行われるトランザクションがお互いに干渉しないことを意味します。厨房に複数のシェフがいて、それぞれが自分の料理を作って他のシェフの作業を邪魔しないのと同じです。

4. 持続性(Durability)

持続性は、トランザクションがコミットされると、システム障害が発生してもコミットされたままになることを保証します。レシピをノートに書くのと同じで、電気が切れてもあなたのレシピは再び電気を入れたときにまだあります。

SQLiteでのトランザクション制御

では、実際のSQLiteのコードで手を試してみましょう!SQLiteはトランザクションを制御するためにいくつかのコマンドを提供しています。

BEGIN TRANSACTION

このコマンドは新しいトランザクションを開始します。「大切なことをするから、注意して!」というようなものです。

BEGIN TRANSACTION;

COMMIT

このコマンドは現在のトランザクションで行われたすべての変更を保存します。「いいえ、終わった。これらの変更を永久にする」というようなものです。

COMMIT;

ROLLBACK

このコマンドは現在のトランザクションで行われたすべての変更を取消します。「あやしい、間違ったことをした。まるでそれがなかったことにしよう」というようなものです。

ROLLBACK;

すべてをまとめて

完全な例を見てみましょう。図書館のデータベースを管理していて、新しい本を追加して図書の総数を更新したいとしましょう。

BEGIN TRANSACTION;

INSERT INTO books (title, author) VALUES ('大いなる盖然性', 'F. スコット・フィッツジェラルド');
UPDATE library_stats SET total_books = total_books + 1;

COMMIT;

この例では、以下の2つのことを行っています:

  1. booksテーブルに新しい本を追加する
  2. library_statsテーブルの図書の総数を1増やす

これらの操作をトランザクションで囲むことで、どちらかが行われるか、またはどちらも行われないことを保証します。これにより、データベースの一貫性を保つことができます。

问题时の対応

さて、何かが間違った場合を見てみましょう:

BEGIN TRANSACTION;

INSERT INTO books (title, author) VALUES ('1984', 'ジョージ・オーウェル');
UPDATE library_stats SET total_books = total_books + 1;

-- あやしい!間違ったことを気づいた
ROLLBACK;

この場合、本を追加し始めたものの、間違ったことを気づきました。ROLLBACKを使用して、トランザクション全体をキャンセルし、データベースは変更されません。

SQLiteでの自動トランザクション

面白い事実ですが、SQLiteは explicitにトランザクションを開始していなければ、すべてのSQLステートメントを自動的にトランザクションで囲みます。安全網のようで、トランザクションを使用忘记しても、SQLiteが守ってくれます!

SQLiteでのトランザクションメソッド

SQLiteの主要なトランザクションメソッドをまとめます。

メソッド 説明
BEGIN TRANSACTION 新しいトランザクションを開始する
COMMIT 現在のトランザクションで行われたすべての変更を保存する
ROLLBACK 現在のトランザクションで行われたすべての変更を取消する

結論

それでは、皆さん!SQLiteトランザクションの世界への初めてのステップを踏み出しました。トランザクションはデータベース操作の保護バブルのように、データの一致性与信頼性を保つために役立ちます。

データベースプログラミングの旅を続ける中で、トランザクションは非常に価値のあるツールとなるでしょう。データの整合性を后台で守る默默の英雄です。

それでは、自信を持ってトランザクションを行ってください!そして、データベースの世界では、時にはROLLBACKすることがあります。間違ったことをコミットするよりも遥かに良いですから!

Credits: Image by storyset