mysql的存储过程语句添加事务管理没有生效

如下写法存储过程的事务是没有生效的,因为START TRANSACTION;不可以写在DDL语句之前

CREATE DEFINER=`root`@`localhost` PROCEDURE `myProcedure`()
BEGIN
START TRANSACTION;
CREATE TABLE IF NOT EXISTS `aa`(
  `a` int(255) NOT NULL AUTO_INCREMENT,
  `b` varchar(255) DEFAULT NULL,
  `c` varchar(255) DEFAULT NULL,
  `ak` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`a`) USING BTREE,
  KEY `ak` (`ak`) USING BTREE COMMENT '外键'
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- 睡眠10秒
DELETE FROM aa WHERE a=2;
SELECT SLEEP(10)
COMMIT;
END

如下写法存储过程的事务是生效的

CREATE DEFINER=`root`@`localhost` PROCEDURE `myProcedure`()
BEGIN
CREATE TABLE IF NOT EXISTS `aa`(
  `a` int(255) NOT NULL AUTO_INCREMENT,
  `b` varchar(255) DEFAULT NULL,
  `c` varchar(255) DEFAULT NULL,
  `ak` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`a`) USING BTREE,
  KEY `ak` (`ak`) USING BTREE COMMENT '外键'
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
START TRANSACTION;
DELETE FROM aa WHERE a=2;
-- 睡眠10秒
SELECT SLEEP(10)
COMMIT;
END

你可能感兴趣的:(mysql,数据库)