sql >> Databáze >  >> RDS >> Mysql

Volání procedury uvnitř funkce vyvolá chybu MySQL 1422

Existuje řada příkazů, které způsobují implicitní potvrzení, a žádný z nich nelze použít uvnitř uložené funkce nebo spouštěče, nebo v uložené proceduře, která je volána z uložené funkce nebo spouštěče, protože to se svým čistým efektem ve skutečnosti nijak neliší.

Krátké zamyšlení vysvětluje důvod:uložené funkce (a spouštěče) se provádějí za běhu dotazu . Vždy, bez výjimky, začnou provádět po spuštění dotazu a ukončí provádění před dokončením dotazu. Mohou se také spustit několikrát během provádění jednoho dotazu, zejména pokud dotaz zahrnuje více řádků.

V tomto světle by nedávalo smysl, kdyby bylo možné COMMIT transakce, zatímco běží jeden dotaz... a to je to, co START TRANSACTION ano, pokud transakce běží – implicitně potvrdí aktuální transakci a spustí novou.

To je v pořádku v uložené proceduře, pokud ji nevoláte uprostřed jiného dotazu (prostřednictvím uložené funkce nebo spouštěče, což je jediný způsob, jak vyvolat proceduru uprostřed jiného dotazu), ale děláte to, co kterou děláte, není podporováno... i když neprobíhá transakce, stále není možné zahájit transakci uprostřed běžícího dotazu.

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




  1. Použití PHP a MySQL k naplnění rozevíracího seznamu

  2. Převeďte soubor BibTex na záznamy databáze pomocí Pythonu

  3. TSQL md5 hash se liší od C# .NET md5

  4. Jak používat databázi jako zálohu/přepnutí při selhání v režimu spánku?