Search code examples
mysqltransactionsnested-transactions

Are nested transactions allowed in MySQL?


Does MySQL allow the use of nested transactions?


Solution

  • No, but

    InnoDB supports SAVEPOINTS.

    You can do the following:

    CREATE TABLE t_test (id INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
    
    START TRANSACTION;
    
    INSERT
    INTO    t_test
    VALUES  (1);
    
    SELECT  *
    FROM    t_test;
    
     id
    ---
      1
    
    SAVEPOINT tran2;
    
    INSERT
    INTO    t_test
    VALUES  (2);
    
    SELECT  *
    FROM    t_test;
    
     id
    ---
      1
      2
    
    ROLLBACK TO tran2;
    
    SELECT  *
    FROM    t_test;
    
     id
    ---
      1
    
    ROLLBACK;
    
    SELECT  *
    FROM    t_test;
    
     id
    ---