sql >> Databasteknik >  >> RDS >> Mysql

START TRANSACTION inuti BEGIN ... END kontext eller utanför och LOOP-syntax

  1. Nej:sammansatta satser kan endast användas inom de lagrade programmen.

  2. START TRANSACTION; och COMMIT; är separata uttalanden. Om du vill att brödtexten i ett lagrat program ska innehålla flera satser, måste det omsluta dessa satser i något slags sammansatt satsblock som BEGIN ... END (vilket liknar att omsluta ett block av satser inom klammerparenteser { ... } inom ett C-liknande språk).

    Som sagt, du kunde har ett lagrat program som endast innehåller enkelsatsen START TRANSACTION; eller COMMIT; —Ett sådant program skulle inte kräva något sammansatt satsblock och skulle bara påbörja en ny / commit den aktuella transaktionen respektive.

    Utanför ett lagrat program, där sammansatta programsatsblock inte är tillåtna, kan du utfärda START TRANSACTION; och COMMIT; uttalanden efter behov.

  3. LOOP är också ett sammansatt satsblock, som endast är giltigt inom en lagrad procedur. Det är inte nödvändigt för att inkludera en LOOP blockera inom en BEGIN ... END block, även om det är vanligt (eftersom det annars är svårt att utföra någon nödvändig loopinitiering).

I ditt fall, där du tydligen vill infoga data i en tabell från en looping-konstruktion, måste du antingen:

  • definiera ett lagrat program där du använder LOOP;

  • iterera en loop i ett externt program som exekverar databasfrågor vid varje iteration; eller

  • omdefiniera din logik i termer av uppsättningar som SQL direkt kan arbeta på.




  1. Hur kontrollerar jag om MySQL returnerar null/tom?

  2. Oracle Kombinera flera kolumner till en

  3. Prestanda för att söka igenom 100 miljoner skivor

  4. MySQL Ordna efter ett nummer, null sist