Mysql
 sql >> база данни >  >> RDS >> Mysql

Извикването на процедура вътре във функция хвърля MySQL ГРЕШКА 1422

Има редица изрази, които предизвикват имплицитен комит и нито един от тях не може да се използва вътре в съхранена функция или тригер, или в съхранена процедура, която се извиква от съхранена функция или тригер, защото това всъщност не е по-различно в чистия си ефект.

Кратко размисъл обяснява причината за това:съхранените функции (и тригери) се изпълняват докато се изпълнява заявка . Те винаги, без изключение, започват да се изпълняват след началото на заявката и завършват изпълнението, преди заявката да приключи. Те могат също да се изпълняват няколко пъти по време на изпълнението на една заявка, особено когато заявката включва няколко реда.

В тази светлина не би имало смисъл, ако беше възможно COMMIT транзакция, докато се изпълнява една заявка... и това е, което START TRANSACTION прави, ако дадена транзакция се изпълнява -- тя неявно извършва текущата транзакция и започва нова.

Това е добре в съхранена процедура, стига да не я извикате в средата на друга заявка (чрез съхранена функция или тригер, което е единственият начин да извикате процедура в средата на друга заявка), а правите това, което което правите тук не се поддържа... дори и да не се изпълнява транзакция, пак не е възможно да стартирате транзакция по средата на изпълнявана заявка.

http://dev.mysql.com/doc/refman /5.6/bg/implicit-commit.html




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да предам параметри на mysql

  2. Защо не мога да покажа същия резултат два пъти, използвайки mysqli_fetch_assoc?

  3. Извършване на изчисление в MySQL стойност по подразбиране

  4. Как да изведете комбинирани резултати от две MySQL таблици, използвайки PDO

  5. Python:използвате mysqldb за импортиране на MySQL таблица като речник?