BEGIN¶
Commence une transaction dans la session en cours.
START TRANSACTION est un synonyme de BEGIN.
- Voir aussi :
COMMIT , ROLLBACK , SHOW TRANSACTIONS , DESCRIBE TRANSACTION
Syntaxe¶
BEGIN [ { WORK | TRANSACTION } ] [ NAME <name> ]
START TRANSACTION [ NAME <name> ]
Paramètres¶
WORK | TRANSACTION
Mots clés facultatifs qui assurent la compatibilité avec d’autres systèmes de bases de données.
NAME name
Chaîne facultative qui attribue un nom à la transaction. Un nom aide à identifier une transaction, mais n’est pas requis et n’a pas besoin d’être unique.
Notes sur l’utilisation¶
Toutes les transactions ont un ID interne généré par le système. L’ID de transaction est un entier signé de 64 bits (de long). La plage de valeurs va de -9 223 372 036 854 775 808 (-2 63) à 9 223 372 036 854 775 807 (2 63 - 1).
Si vous spécifiez un nom pour une transaction, le mot clé
NAME
est requis.Si aucun nom n’est spécifié, un nom généré par le système est affecté à la transaction.
Pour terminer une transaction, une commande COMMIT ou ROLLBACK doit être explicitement exécutée. Tant qu’une de ces commandes n’est pas exécutée, la transaction reste ouverte.
Lorsqu’une instruction SQL interroge un flux dans une transaction explicite, le flux est interrogé au point d’avance du flux (c’est-à-dire l’horodatage) lorsque la transaction a commencé plutôt que lorsque l’instruction a été exécutée. Ce comportement concerne à la fois les instructions DML et CREATE TABLE … AS SELECT (CTAS) qui remplissent une nouvelle table avec des lignes d’un flux existant.
Si deux instructions BEGIN à la suite sont exécutées (dans le même scope), la seconde est ignorée. Par exemple, dans le code suivant, les deuxième et troisième BEGINs n’ont aucun effet ; la transaction ouverte existante se poursuit.
begin; begin; -- Ignored! insert into table1 ...; begin; -- Ignored! insert into table2 ...; commit;
Les règles peuvent être plus complexes si vous utilisez des transactions autonomes scopées et des procédures stockées .
Exemples¶
Note
Ces exemples ne comprennent pas les commandes nécessaires pour effectuer les transactions. Pour des exemples de transactions complètes, voir COMMIT ou ROLLBACK.
Commencer une transaction :
BEGIN; SHOW TRANSACTIONS; +---------------+--------+--------------+--------------------------------------+-------------------------------+---------+ | id | user | session | name | started_on | state | |---------------+--------+--------------+--------------------------------------+-------------------------------+---------| | 1530042321085 | USER1 | 223347060798 | 56cb9163-77a3-4223-b3e0-aa24a20540a3 | 2018-06-26 12:45:21.085 -0700 | running | +---------------+--------+--------------+--------------------------------------+-------------------------------+---------+ SELECT CURRENT_TRANSACTION() +-----------------------+ | CURRENT_TRANSACTION() | |-----------------------| | 1530042321085 | +-----------------------+Notez le nom attribué par le système,
56cb9163-77a3-4223-b3e0-aa24a20540a3
, pour la transaction.
Commencez une transaction avec un nom spécifié :
BEGIN NAME T1; SHOW TRANSACTIONS; +---------------+--------+--------------+------+-------------------------------+---------+ | id | user | session | name | started_on | state | |---------------+--------+--------------+------+-------------------------------+---------| | 1530042377426 | USER1 | 223347060798 | T1 | 2018-06-26 12:46:17.426 -0700 | running | +---------------+--------+--------------+------+-------------------------------+---------+ SELECT CURRENT_TRANSACTION(); +-----------------------+ | CURRENT_TRANSACTION() | |-----------------------| | 1530042377426 | +-----------------------+
Même exemple que l’exemple précédent, mais en utilisant START TRANSACTION au lieu de BEGIN :
START TRANSACTION NAME T2; SHOW TRANSACTIONS; +---------------+--------+--------------+------+-------------------------------+---------+ | id | user | session | name | started_on | state | |---------------+--------+--------------+------+-------------------------------+---------| | 1530042467963 | USER1 | 223347060798 | T2 | 2018-06-26 12:47:47.963 -0700 | running | +---------------+--------+--------------+------+-------------------------------+---------+ SELECT CURRENT_TRANSACTION(); +-----------------------+ | CURRENT_TRANSACTION() | |-----------------------| | 1530042467963 | +-----------------------+