Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ Atomicity | セクション
SQL最適化とクエリ機能

bookAtomicity

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

原子性は、データベーストランザクションの基本的な特性であり、トランザクション内のすべての操作が単一の不可分な単位として扱われることを保証します。つまり、トランザクション内のすべての操作が正常に完了するか、いずれもデータベースに反映されないかのいずれかです。原子性は全てか無かのルールと考えることができます。たとえば、bank_accountsテーブルを使用して、ある銀行口座から別の口座へ送金する場合を想像してください。送金は、一方の口座からの引き落としと、もう一方の口座への入金の両方が成功した場合にのみ成立する必要があります。引き落とし後、入金前に何か問題が発生した場合、お金が消失したり二重に現れたりしては困ります。原子性は、このような不整合な状態になることを防ぎます。

例えば、Alice Johnsonの口座からBob Smithの口座へ1,000ドルを移動したいとします。これは、Aliceの残高を減らし、Bobの残高を増やすという2つのステップが必要です。両方のステップが成功するか、どちらも反映されないかのいずれかでなければなりません。もしAliceの口座から引き落とし後、Bobの口座への入金前にシステム障害やエラーが発生した場合、原子性によってトランザクション全体が取り消され、両方の口座残高は変更されません。

12345678910111213141516171819
-- Begin a transaction to transfer $1000 from Alice (account_id 1) to Bob (account_id 2) BEGIN; UPDATE bank_accounts SET balance = balance - 1000 WHERE account_id = 1; -- Simulate an error, such as insufficient funds or a system issue -- RAISE EXCEPTION 'Simulated error: transfer failed'; UPDATE bank_accounts SET balance = balance + 1000 WHERE account_id = 2; -- If all statements succeed, commit the transaction COMMIT; -- Query balances to see the effect of the transaction SELECT account_id, owner_name, balance FROM bank_accounts;
copy

上記のコードサンプルでは、BEGINでトランザクションを開始します。最初のUPDATE文でAliceの口座から1,000ドルが差し引かれます。もし2つ目のUPDATE(例えば、例外の発生やシステム障害など)が発生する前にエラーが起きた場合、トランザクションはコミットされません。その代わりにROLLBACKコマンドが発行され、これまでトランザクション内で行われたすべての変更が取り消されます。つまり、Aliceの残高は元の値に戻り、Bobの残高も変更されません。ロールバックはSQLにおける原子性を実現する仕組みであり、トランザクションがコミットされる前に何か問題が発生した場合、部分的な変更がデータベースに保存されないことを保証します。すべての処理が正常に完了した場合のみ、COMMITによって変更が永続化されます。

1. トランザクションがデータを部分的に更新した後に失敗した場合、何が起こりますか?

2. トランザクションを元に戻すために使用されるSQLコマンドはどれですか?

3. 原子性はSQLのエラー処理とどのように関係していますか?

question mark

トランザクションがデータを部分的に更新した後に失敗した場合、何が起こりますか?

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

question mark

トランザクションを元に戻すために使用されるSQLコマンドはどれですか?

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

question mark

原子性はSQLのエラー処理とどのように関係していますか?

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

すべて明確でしたか?

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

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

セクション 1.  2

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 1.  2
some-alt