version 11
Une transaction est un ensemble d'instructions SQL exécutées en bloc. Soit toutes les instructions sont exécutées, soit aucune d'entre elles. Les transactions placent des verrous logiques pendant leur exécution afin de préserver l'intégrité des données. Si la transaction se termine correctement, vous pouvez appeler la commande COMMIT afin de valider et d'enregistrer définitivement les modifications effectuées. Dans le cas contraire, appelez la commande ROLLBACK afin d'annuler toutes les modifications et de restituer la base de données dans son état précédent.
Au niveau de la base de données, il n'y a pas de différence entre une transaction 4D et une transaction SQL. Les deux types de transactions partagent les mêmes données et le même process. Les instructions SQL incluses dans une structure Debut SQL/Fin SQL, la commande CHERCHER PAR SQL et les commandes SQL génériques intégrées appliquées à la base locale sont toujours exécutées dans le même contexte que les commandes 4D standard.
Note : 4D propose l'option "Auto-commit" permettant de démarrer et de valider automatiquement des transactions lors de l'utilisation des commande SIUD (SELECT, INSERT, UPDATE et DELETE) afin de préserver l'intégrité des données. Pour plus d'informations, reportez-vous à la section Implémentations du moteur SQL de 4D.
Les exemples suivants illustrent les différentes combinaisons de transactions.
Ni "John" ni "Smith" ne seront ajoutés dans la table emp :
SQL LOGIN(SQL_INTERNAL ;"";"") `Initaliser le moteur SQL de 4D SQL DEBUT TRANSACTION `Démarrer une transaction dans le process courant Debut SQL INSERT INTO emp (NAME) VALUES ('John'); Fin SQL SQL EXECUTER("START") `Autre transaction dans le process courant SQL ANNULER CHARGEMENT SQL EXECUTER("INSERT INTO emp (NAME) VALUES ('Smith')") `Cette instruction est exécutée dans le même process SQL ANNULER CHARGEMENT SQL EXECUTER("ROLLBACK") `Annuler la transaction interne du process ANNULER TRANSACTION `Annuler la transaction externe du process SQL LOGOUT
Seul "John" sera ajouté dans la table emp :
SQL LOGIN(SQL_INTERNAL ;"";"") DEBUT TRANSACTION Debut SQL INSERT INTO emp (NAME) VALUES ('John'); Fin SQL SQL EXECUTER("START") SQL ANNULER CHARGEMENT SQL EXECUTER("INSERT INTO emp (NAME) VALUES ('Smith')") SQL ANNULER CHARGEMENT SQL EXECUTER("ROLLBACK") `Annuler la transaction interne du process VALIDER TRANSACTION `Valider la transaction externe du process SQL LOGOUT
Ni "John" ni "Smith" ne seront ajoutés dans la table emp. La transaction externe annule la transaction interne :
SQL LOGIN(SQL_INTERNAL ;"";"") DEBUT TRANSACTION Debut SQL INSERT INTO emp (NAME) VALUES ('John'); Fin SQL SQL EXECUTER("START") SQL ANNULER CHARGEMENT SQL EXECUTER("INSERT INTO emp (NAME) VALUES ('Smith')") SQL ANNULER CHARGEMENT SQL EXECUTER("COMMIT") `Valider la transaction interne du process ANNULER TRANSACTION `Annuler la transaction externe du process SQL LOGOUT
"John" et "Smith" seront ajoutés dans la table emp :
SQL LOGIN(SQL_INTERNAL ;"";"") DEBUT TRANSACTION Debut SQL INSERT INTO emp (NAME) VALUES ('John'); Fin SQL SQL EXECUTER("START") SQL ANNULER CHARGEMENT SQL EXECUTER("INSERT INTO emp (NAME) VALUES ('Smith')") SQL ANNULER CHARGEMENT SQL EXECUTER("COMMIT") `Valider la transaction interne du process VALIDER TRANSACTION `Valider la transaction externe du process SQL LOGOUT