Catégories :

Transactions

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         |
+-----------------------+
Revenir au début