version 11
トランザクションはグループで実行されるSQL文のセットです。すべてが正しく実行されるか、まったく効果を及ぼさないかです。トランザクションは実行時にデータの整合性を保つためロックを使用します。トランザクションが正しく終了したら、COMMIT文を使用して更新を永続化します。そうでなければ、ROLLBACK文を使用して更新をキャンセルし、以前の状態にデータベースを戻します。
4DのトランザクションとSQLのトランザクションの間に違いはありません。両タイプのトランザクションは同じデータおよびプロセスを共有します。ローカルデータベースに適用されるBegin SQL/End SQLの間のSQL文、QUERY BY SQL、そして統合された汎用SQLコマンドは、常に標準のSQLコマンドと同じコンテキストで実行されます。
以下の例題は、複数の異なるトランザクション使用した場合の動作を説明します:
empテーブルに“John”も“Smith”も追加されません:
SQL LOGIN(SQL_INTERNAL ;"";"") `4D SQLエンジンを初期化 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