IT企業未経験30代 100日後に自社のシステムを作れるようにする。⑨

今回は、前回で作成したテーブルからTRANSACTIONを使用した例を作成したいと思います。

TRANSACTIONついて
TRANSACTIONとは、データベースに対して複数の処理をまとめたものをトランザクションといいます。
SQLは1文ずつ実行することが出来ますが、連続して複数のデータ追加や更新の必要がある場合はトランザクションで処理できます。
COMMIT;
トランザクションの処理を確定する時に使用します。
例えば、Yamada HanakoさんとSuzuki Kentaさんの勤怠を追加で書いた時にトランザクションの処理を確定したい時にコミットを使用します。
START TRANSACTION;
INSERT INTO employee_attendances(id, name, check_in_datetime, check_in_message) VALUES('11','Yamada Hanako', '2024-9-7 07:40:00', 'NULL');
INSERT INTO employee_attendances(id, name, check_in_datetime, check_in_message) VALUES('12','Suzuki Kenta', '2024-9-7 07:50:00', 'NULL');
COMMIT;

ROLLBACK;
トランザクション内の処理で問題が発生した時に、処理を取り消してトランザクション開始点までの状態まで戻すことが出来る。
例えば、トランザクションを開始して勤怠を入力した際に、idの番号が飛んでることに気づきました。
勤怠入力する時にidの指定をしていなかった為です。もう一度やり直したい時にロールバックを使用します。
START TRANSACTION;
INSERT INTO employee_attendances(name, check_in_datetime, check_in_message) VALUES ('Tanaka Trou', '2024-09-8 07:30:00', 'NULL');
INSERT INTO employee_attendances(name, check_in_datetime, check_in_message) VALUES ('Yamada Hanako', '2024-09-8 07:40:00', 'NULL');
ROLLBACK;

注意点まとめ・余談
トランザクションのACID特性
- 原子性(Atomicity)
トランザクションが終わったとき、そこに含まれていた更新処理は、すべて実行されるか、またはすべて実行されない状態で終わることを保証する性質
- 一貫性(Consistency)
トランザクションに含まれる処理は、データベースにあらかじめ設定された制約、たとえば主キーやNOT NULL制約を満たす、という性質 一貫性は整合性とも呼ぶ
- 独立性(Isolation)
トランザクション同士が互いに干渉を受けないことを保証する性質
- 永続性(Durability)
トランザクションが終了したら、その時点でのデータの状態が保存されることを保証する性質
今回は、TRANSACTIONについてまとめてみました。
ただ作業中に気づいたのですが、idの番号ですが下記のSQLコマンドで番号指定すればid番号を指定しなくても問題無いことに気づきました。
ALTER TABLE employee_attendances AUTO_INCREMENT = 13;

次回は結合(JOIN)についてまとめていきます。

また次回よろしくお願いします。
~2024年9月12日~