Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 原子性 | ACID
SQL最適化とクエリ機能

book原子性

メニューを表示するにはスワイプしてください

原子性は、SQLにおけるACID特性の一つであり、SQLを使用してデータをクエリする際にトランザクションを利用することを保証します。 SQLデータベースの文脈では、原子性は特定の論理単位内のすべての操作が完了するか、いずれも完了しないことを保証します。

SQLにおけるトランザクション処理

主な特徴

  • ロールバック: 途中で失敗した場合(例:エラーや制約違反など)、トランザクション全体がロールバックされ、変更が元に戻される;

  • コミット: すべての操作が成功した場合、トランザクションがコミットされ、変更が永続的になる。

SQLでのトランザクション作成

SQLでは、個々のステートメントがトランザクションとして扱われます。 ただし、複数のステートメントを含むトランザクションを手動で作成することも可能です。

次のようなシナリオを想定します:

  • BankAccounts テーブルには、account_number(主キー)、account_holderbalance のカラムが含まれています;

  • UserLogs テーブルには、account_numberactiontimestamp などのカラムがあります。account_numbertimestamp の組み合わせがこのリレーションの複合主キーです。

次のコードサンプルでは、これらのテーブルにデータを挿入・管理する方法を示し、提供されたスキーマの実際のエントリを用いて原子的な操作を実演します。

12
SELECT * FROM BankAccounts;
copy
12
SELECT * FROM UserLogs;
copy

ここで、新しい銀行口座を作成し、同時にその追加を示すログエントリを生成するシナリオを考えます。 これら2つの操作、すなわち口座の追加とイベントの記録は、単一の論理単位として扱われ、1つのトランザクション内で実行される必要があります。以下は、トランザクションを用いてこれを実現する非常に基本的な例です。

123456789101112131415161718
-- Begin the transaction BEGIN; -- Insert a new bank account with account number 109, account holder Emma Watson, and initial balance of 0 INSERT INTO BankAccounts (account_number, account_holder, balance) VALUES (109, 'Emma Watson', 0); -- Step 2: Add log entry if the account was added -- Insert a log entry into the UserLogs table indicating that a new account was added with account number 109 INSERT INTO UserLogs (account_number, action) VALUES (109, 'New account added'); -- Commit the transaction, making the changes permanent COMMIT; -- Check the result SELECT * FROM BankAccounts; SELECT * FROM UserLogs;
copy

上記のクエリでは、BEGIN ブロックを使用して、以降のすべてのステートメントが単一の単位として扱われることを示しています。いずれかのステートメントが実行されない場合、他のステートメントも実行されてはなりません。
COMMIT キーワードは、トランザクションブロックの終了を示します。

question mark

データベーストランザクションにおけるアトミック性の概念は何を保証しますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  3

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  3
some-alt