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

START TRANSACTION uvnitř kontextu BEGIN ... END nebo mimo syntaxi a LOOP

  1. Ne:složené příkazy lze použít pouze v těle uložených programů.

  2. START TRANSACTION; a COMMIT; jsou samostatná prohlášení. Pokud chcete, aby tělo uloženého programu obsahovalo více příkazů, bude muset tyto příkazy uzavřít do nějakého složeného bloku příkazů, jako je BEGIN ... END (což je podobné jako uzavření bloku příkazů do složených závorek { ... } v jazyce podobném C).

    To znamená, že můžete mít uložený program, který obsahuje pouze jeden příkaz START TRANSACTION; nebo COMMIT; —Takový program by nevyžadoval žádný složený blok příkazů a pouze by zahájil novou / potvrzoval aktuální transakci.

    Mimo uložený program, kde nejsou povoleny složené příkazové bloky, můžete zadat START TRANSACTION; a COMMIT; výpisy podle potřeby &kdy.

  3. LOOP je také složený příkazový blok, který je platný pouze v rámci uložené procedury. Není to nezbytné pro uzavření LOOP bloku v rámci BEGIN ... END blok, i když je to obvyklé (protože jinak je obtížné provést jakoukoli požadovanou inicializaci smyčky).

Ve vašem případě, kdy zjevně chcete vložit data do tabulky ze smyčkové konstrukce, budete muset:

  • definujte uložený program, ve kterém používáte LOOP;

  • iterovat smyčku v externím programu, který provádí databázové dotazy při každé iteraci; nebo

  • předefinujte svou logiku z hlediska sad, na kterých může SQL přímo pracovat.




  1. výkon odboru versus odbor vše

  2. Nahrání více obrázků pomocí PHP, které ukládá pouze jednu cestu k souboru do databáze MySQL

  3. JPA + Hibernate:Jak definovat omezení s ON DELETE CASCADE

  4. Kdy byste použili funkci s tabulkovou hodnotou?