Има редица изрази, които предизвикват имплицитен комит и нито един от тях не може да се използва вътре в съхранена функция или тригер, или в съхранена процедура, която се извиква от съхранена функция или тригер, защото това всъщност не е по-различно в чистия си ефект.
Кратко размисъл обяснява причината за това:съхранените функции (и тригери) се изпълняват докато се изпълнява заявка . Те винаги, без изключение, започват да се изпълняват след началото на заявката и завършват изпълнението, преди заявката да приключи. Те могат също да се изпълняват няколко пъти по време на изпълнението на една заявка, особено когато заявката включва няколко реда.
В тази светлина не би имало смисъл, ако беше възможно COMMIT
транзакция, докато се изпълнява една заявка... и това е, което START TRANSACTION
прави, ако дадена транзакция се изпълнява -- тя неявно извършва текущата транзакция и започва нова.
Това е добре в съхранена процедура, стига да не я извикате в средата на друга заявка (чрез съхранена функция или тригер, което е единственият начин да извикате процедура в средата на друга заявка), а правите това, което което правите тук не се поддържа... дори и да не се изпълнява транзакция, пак не е възможно да стартирате транзакция по средата на изпълнявана заявка.
http://dev.mysql.com/doc/refman /5.6/bg/implicit-commit.html