如何在MySQL中不创建过程的情况下执行事务

时间:2016-09-29 03:03:22

标签: php mysql sql stored-procedures transactions

SET autocommit=0;
DELIMITER$$
CREATE OR REPLACE PROCEDURE mytestproc()
BEGIN
    DECLARE `_rollback` BOOL DEFAULT 0;
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
    START TRANSACTION;
    INSERT INTO tbl_campo 
                (alias,nombre,descripcion,codigo_usuario, fecha_actualizacion, fecha_creacion, fecha_eliminacion) 
                VALUES ('aliasxmp5','nombrexmp5','descxmp5',1, NOW(), NOW(), NULL); 
    REPLACE INTO tbl_campo_tabla_indicador_periodo 
                (codigo_campo,codigo_tabla_indicador_periodo,codigo_usuario, 
                fecha_actualizacion, fecha_creacion, fecha_eliminacion) 
                VALUES (last_insert_id(),9,1, NOW(), NOW(), NULL);  
    IF `_rollback` THEN
        ROLLBACK;
    ELSE
        COMMIT;
    END IF;
END$$

call mytestproc;

要执行此事务,我需要创建一个过程并接下来调用它(mytestproc),如何在不使用PROCEDURE(CREATE PROCEDURE)的情况下修改它来运行它,只需从BEGIN运行到END?

感谢。

1 个答案:

答案 0 :(得分:0)

请试试这个:

DELIMITER $$

DROP PROCEDURE IF EXISTS  `mytestproc`;

CREATE PROCEDURE `mytestproc`()

BEGIN
  DECLARE `_rollback` BOOL DEFAULT 0;
  Declare autocommit int default 0;
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
  START TRANSACTION;
  INSERT INTO tbl_campo 
            (alias,nombre,descripcion,codigo_usuario, fecha_actualizacion, fecha_creacion, fecha_eliminacion) 
            VALUES ('aliasxmp5','nombrexmp5','descxmp5',1, NOW(), NOW(), NULL); 
  REPLACE INTO tbl_campo_tabla_indicador_periodo 
            (codigo_campo,codigo_tabla_indicador_periodo,codigo_usuario, 
            fecha_actualizacion, fecha_creacion, fecha_eliminacion) 
            VALUES (last_insert_id(),9,1, NOW(), NOW(), NULL);  
  IF `_rollback` THEN
    ROLLBACK;
  ELSE
    COMMIT;
  END IF;
END