sql >> Database teknologi >  >> RDS >> Mysql

START TRANSAKTION inde i BEGIN ... END kontekst eller udenfor og LOOP syntaks

  1. Nej:sammensatte sætninger kan kun bruges i kroppen af ​​lagrede programmer.

  2. START TRANSACTION; og COMMIT; er separate udsagn. Hvis du ønsker, at brødteksten af ​​et lagret program skal indeholde flere sætninger, skal det omslutte disse sætninger i en slags sammensat sætningsblok såsom BEGIN ... END (hvilket svarer til at omslutte en blok af udsagn i klammer { ... } inden for et C-lignende sprog).

    Når det er sagt, kunne du har et lagret program, som kun indeholder enkeltsætningen START TRANSACTION; eller COMMIT; — et sådant program ville ikke kræve nogen sammensat erklæringsblok og ville blot påbegynde henholdsvis en ny / commit den aktuelle transaktion.

    Uden for et lagret program, hvor sammensatte sætningsblokke ikke er tilladt, kan du udstede START TRANSACTION; og COMMIT; erklæringer efter behov.

  3. LOOP er også en sammensat sætningsblok, som kun er gyldig i en lagret procedure. Det er ikke nødvendigt for at omslutte en LOOP blokere i en BEGIN ... END blok, selvom det er normalt (da det ellers er vanskeligt at udføre en påkrævet loop-initialisering).

I dit tilfælde, hvor du tilsyneladende ønsker at indsætte data i en tabel fra en looping-konstruktion, skal du enten:

  • definere et lagret program, hvor du bruger LOOP;

  • iterere en løkke i et eksternt program, der udfører databaseforespørgsler på hver iteration; eller

  • redefiner din logik i form af sæt, som SQL direkte kan fungere efter.




  1. Hvad er størrelsen på kolonnen af ​​int(11) i mysql i bytes?

  2. 2 måder at oprette en tabel på en sammenkædet server ved hjælp af T-SQL

  3. Vælg den seneste række med GROUP BY i MySQL

  4. Låser borde op, hvis tråden går tabt