BEGIN でトランザクションを開始する
このステップでは、BEGIN
文を使用して MySQL でトランザクションを開始する方法を学びます。トランザクションはデータベース管理における基本的な概念で、データの整合性と一貫性を保証します。トランザクションは、1 つ以上の SQL 操作のシーケンスで、単一の作業単位として扱われます。トランザクション内のすべての操作が成功するか、またはどれも成功しないかのいずれかです。
実践的な部分に入る前に、トランザクションが重要な理由を理解しましょう。あなたがある銀行口座から別の銀行口座にお金を振り込むシチュエーションを想像してみてください。これには 2 つの操作が関係します。送金者の口座から金額を引き落とすことと、受取人の口座に金額を入金することです。最初の操作が成功したが 2 番目の操作が失敗した場合(例えば、システムクラッシュによる)、お金が失われてしまいます。トランザクションは、両方の操作が一緒に成功するか、一緒に失敗するかを保証することで、このような不整合を防ぎます。
MySQL でトランザクションを開始するには、BEGIN
文(またはその別名 START TRANSACTION
)を使用します。この文は新しいトランザクションの開始を示します。それ以降の SQL 文は、COMMIT
で変更を永続化するか、ROLLBACK
で変更を破棄するまで、このトランザクションの一部となります。
まず、MySQL サーバーに接続しましょう。ターミナルを開き、次のコマンドを実行します。
mysql -u root -p
root パスワードの入力を求められます。MySQL インストール時に設定したパスワードを入力してください。パスワードを設定していない場合は、Enter キーを押してください。
これで MySQL サーバーに接続したので、作業するデータベースとテーブルを作成しましょう。次の SQL 文を実行します。
CREATE DATABASE IF NOT EXISTS labex_db;
USE labex_db;
CREATE TABLE IF NOT EXISTS accounts (
id INT PRIMARY KEY AUTO_INCREMENT,
account_number VARCHAR(50) NOT NULL,
balance DECIMAL(10, 2) NOT NULL
);
これらのコマンドは、labex_db
という名前のデータベースと、そのデータベース内に accounts
という名前のテーブルを作成します。accounts
テーブルには、id
、account_number
、balance
の 3 つの列があります。
次に、accounts
テーブルにいくつかの初期データを挿入しましょう。
INSERT INTO accounts (account_number, balance) VALUES
('ACC001', 1000.00),
('ACC002', 500.00);
では、トランザクションを開始しましょう。次の文を実行します。
BEGIN;
このコマンドは新しいトランザクションを開始します。それ以降の SQL 文は、このトランザクションの一部となります。
トランザクションが開始されたことを確認するには、簡単な更新文を実行できます。たとえば、口座 'ACC001' から 100 を引き落としましょう。
UPDATE accounts SET balance = balance - 100 WHERE account_number = 'ACC001';
次に、'ACC001' の残高を確認しましょう。
SELECT * FROM accounts WHERE account_number = 'ACC001';
'ACC001' の残高が 900.00 に更新されていることがわかるはずです。ただし、これらの変更はまだ永続的ではありません。現在のトランザクション内でのみ表示されます。変更を永続化するには、次のステップで学ぶ COMMIT
でトランザクションをコミットする必要があります。この時点で、コミットまたはロールバックせずに MySQL 接続を閉じると、変更は失われます。