sql >> Database >  >> RDS >> Mysql

START TRANSACTIE binnen BEGIN ... END-context of buiten en LOOP-syntaxis

  1. Nee:samengestelde instructies kunnen alleen worden gebruikt binnen de hoofdtekst van opgeslagen programma's.

  2. START TRANSACTION; en COMMIT; zijn afzonderlijke verklaringen. Als u wilt dat de hoofdtekst van een opgeslagen programma meerdere instructies bevat, moet het die instructies in een soort samengesteld instructieblok plaatsen, zoals BEGIN ... END (wat vergelijkbaar is met het omsluiten van een blok met instructies tussen accolades { ... } binnen een C-achtige taal).

    Dat gezegd hebbende, je zou een opgeslagen programma hebben dat alleen de enkele instructie START TRANSACTION; . bevat of COMMIT; —zo'n programma zou geen samengesteld instructieblok vereisen en zou slechts respectievelijk een nieuwe / commit de huidige transactie beginnen.

    Buiten een opgeslagen programma, waar samengestelde instructieblokken niet zijn toegestaan, kunt u START TRANSACTION; opgeven en COMMIT; verklaringen als en wanneer nodig.

  3. LOOP is ook een samengesteld instructieblok, dat alleen geldig is binnen een opgeslagen procedure. Het is niet nodig om een ​​LOOP in te sluiten blok binnen een BEGIN ... END blok, hoewel het gebruikelijk is (omdat het anders moeilijk is om de vereiste lusinitialisatie uit te voeren).

In uw geval, waar u blijkbaar gegevens in een tabel wilt invoegen vanuit een lusconstructie, moet u ofwel:

  • definieer een opgeslagen programma waarin u LOOP . gebruikt;

  • een lus herhalen in een extern programma dat databasequery's uitvoert bij elke iteratie; of

  • herdefinieer uw logica in termen van sets waarop SQL direct kan werken.




  1. Mysql commode engine MyISAM naar InnoDB

  2. Parameterfouten in Laravel

  3. De grootte van een database controleren in MySQL

  4. 3 manieren om het aantal systeemtabellen in een SQL Server-database te tellen