トランザクションはグループで実行されるSQL文のセットです。すべてが正しく実行されるか、まったく効果を及ぼさないかです。トランザクションは実行時にデータの整合性を保つためロックを使用します。トランザクションが正しく終了したら、COMMIT文を使用して更新を永続化します。そうでなければ、ROLLBACK文を使用して更新をキャンセルし、データベースを以前の状態に戻します。
4DのトランザクションとSQLのトランザクションの間に違いはありません。両タイプのトランザクションは同じデータおよびプロセスを共有します。ローカルデータベースに適用されるBegin SQL/End SQLの間のSQL文、QUERY BY SQL、そして統合された汎用SQLコマンドは、常に標準のSQLコマンドと同じコンテキストで実行されます。
Note: 4Dは"自動コミット"オプションを提供していて、データ整合性を確保するために、SIUDコマンド (SELECT、INSERT、UPDATE、DELETE) 利用時に自動でトランザクションを開始し、受け入れることができます。詳細情報はSET PROCESS VARIABLE4Dと4D SQLエンジン統合の原則を参照してください。
以下の例題は、複数の異なるトランザクション使用した場合の動作を説明します:
empテーブルに“John”も“Smith”も追加されません:
SQL LOGIN(SQL_INTERNAL;"";"")
START TRANSACTION
Begin SQL
INSERT INTO emp
(NAME)
VALUES ('John');
End SQL
SQL EXECUTE("START")
SQL CANCEL LOAD
SQL EXECUTE("INSERT INTO emp (NAME) VALUES ('Smith')")
SQL CANCEL LOAD
SQL EXECUTE("ROLLBACK")
CANCEL TRANSACTION
SQL LOGOUT
empテーブルに“John”のみが追加されます:
SQL LOGIN(SQL_INTERNAL;"";"")
START TRANSACTION
Begin SQL
INSERT INTO emp
(NAME)
VALUES ('John');
End SQL
SQL EXECUTE("START")
SQL CANCEL LOAD
SQL EXECUTE("INSERT INTO emp (NAME) VALUES ('Smith')")
SQL CANCEL LOAD
SQL EXECUTE("ROLLBACK")
VALIDATE TRANSACTION
SQL LOGOUT
empテーブルに“John”も“Smith”も追加されません。外側のトランザクションが内側のトランザクションもキャンセルします:
SQL LOGIN(SQL_INTERNAL;"";"")
START TRANSACTION
Begin SQL
INSERT INTO emp
(NAME)
VALUES ('John');
End SQL
SQL EXECUTE("START")
SQL CANCEL LOAD
SQL EXECUTE("INSERT INTO emp (NAME) VALUES ('Smith')")
SQL CANCEL LOAD
SQL EXECUTE("COMMIT")
CANCEL TRANSACTION
SQL LOGOUT
empテーブルに“John”と“Smith”が追加されます:
SQL LOGIN(SQL_INTERNAL;"";"")
START TRANSACTION
Begin SQL
INSERT INTO emp
(NAME)
VALUES ('John');
End SQL
SQL EXECUTE("START")
SQL CANCEL LOAD
SQL EXECUTE("INSERT INTO emp (NAME) VALUES ('Smith')")
SQL CANCEL LOAD
SQL EXECUTE("COMMIT")
VALIDATE TRANSACTION
SQL LOGOUT