CREATEDEFINER=`root`@`localhost`PROCEDURE`myProcedure`()BEGINSTARTTRANSACTION;CREATETABLEIFNOTEXISTS`aa`(`a`int(255)NOTNULLAUTO_INCREMENT,`b`varchar(255)DEFAULTNULL,`c`varchar(255)DEFAULTNULL,`ak`varchar(255)DEFAULTNULL,PRIMARYKEY(`a`)USINGBTREE,KEY`ak`(`ak`)USINGBTREECOMMENT'外键')ENGINE=InnoDBAUTO_INCREMENT=6DEFAULTCHARSET=utf8;-- 睡眠10秒DELETEFROM aa WHERE a=2;SELECT SLEEP(10)COMMIT;END
如下写法存储过程的事务是生效的
CREATEDEFINER=`root`@`localhost`PROCEDURE`myProcedure`()BEGINCREATETABLEIFNOTEXISTS`aa`(`a`int(255)NOTNULLAUTO_INCREMENT,`b`varchar(255)DEFAULTNULL,`c`varchar(255)DEFAULTNULL,`ak`varchar(255)DEFAULTNULL,PRIMARYKEY(`a`)USINGBTREE,KEY`ak`(`ak`)USINGBTREECOMMENT'外键')ENGINE=InnoDBAUTO_INCREMENT=6DEFAULTCHARSET=utf8;STARTTRANSACTION;DELETEFROM aa WHERE a=2;-- 睡眠10秒SELECT SLEEP(10)COMMIT;END