MySql PHP 存储过程、事务和回滚

MySql PHP stored procedures, transactions and rollbacks

我正在使用存储过程对 Mysql DB

执行 CRUD 操作
DELIMITER $$

CREATE PROCEDURE `transaction_sp` ()

BEGIN

   DECLARE exit handler for sqlexception
   BEGIN
     -- ERROR
     ROLLBACK;
   END;

   DECLARE exit handler for sqlwarning
   BEGIN
    -- WARNING
    ROLLBACK;
   END;

  START TRANSACTION;
    INSERT INTO table_name (id, name, address) values ('1','Test','xpert.com');
    SET @LID = LAST_INSERT_ID();
    INSERT INTO table_name3 (id, job, responsibilities) values 
    (@LID,'Sr. Developer','Coding,mentoring etc');
COMMIT;
END
$$

现在,我希望如果第二个 INSERT 语句失败,则第二个 SQL 语句不执行,第一个 Insert 语句回滚。

使用我的上述方法,第一笔交易不会回滚。我需要设置任何标志吗?

如何处理?解释清楚的答案会有所帮助。

请看下面我的回答。我相信如果你在每次插入后检查 @@ROWCOUNT@@Error 如果没有行受到影响,你可以回滚。如果我使用的方法有误,请见谅。

DELIMITER $$

    CREATE PROCEDURE `transaction_sp` ()

    BEGIN

       DECLARE @nRowCount1 int,
       @nRowCount2  int

       DECLARE exit handler for sqlexception
       BEGIN
         -- ERROR
         ROLLBACK;
       END;

       DECLARE exit handler for sqlwarning
       BEGIN
        -- WARNING
        ROLLBACK;
       END;

      START TRANSACTION;
        INSERT INTO table_name (id, name, address) values ('1','Test','xpert.com');
        SET @LID = LAST_INSERT_ID();
        SET @nRowCount1 =   @@ROWCOUNT ;
        INSERT INTO table_name3 (id, job, responsibilities) values 
        (@LID,'Sr. Developer','Coding,mentoring etc');
        SET @nRowCount2 =@@ROWCOUNT
        if(@nRowCount1 <=0 and @nRowCount2<=0)
        begin
            ROLLBACK ;
        end
    COMMIT;
    END
    $$