4D v16

トランザクション

ホーム

 
4D v16
トランザクション

トランザクション  


 

説明  

トランザクションはグループで実行されるSQL文のセットです。すべてが正しく実行されるか、まったく効果を及ぼさないかです。トランザクションは実行時にデータの整合性を保つためロックを使用します。トランザクションが正しく終了したら、COMMIT文を使用して更新を永続化します。そうでなければ、ROLLBACK文を使用して更新をキャンセルし、データベースを以前の状態に戻します。

4DのトランザクションとSQLのトランザクションの間に違いはありません。両タイプのトランザクションは同じデータおよびプロセスを共有します。ローカルデータベースに適用されるBegin SQL/End SQLの間のSQL文、QUERY BY SQL、そして統合された汎用SQLコマンドは、常に標準のSQLコマンドと同じコンテキストで実行されます。

Note: 4Dは"自動コミット"オプションを提供していて、データ整合性を確保するために、SIUDコマンド (SELECTINSERTUPDATEDELETE) 利用時に自動でトランザクションを開始し、受け入れることができます。詳細情報はSET PROCESS VARIABLE4Dと4D 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

 
プロパティ 

プロダクト: 4D
テーマ: トランザクション

 
履歴 

 
ARTICLE USAGE

SQLリファレンス ( 4D v16)