НАЧАТЬ СДЕЛКУ внутри контекста BEGIN… END или вне его и синтаксиса LOOP

У меня есть два вопроса о Compound-Statement и транзакциях в MySQL.

ПЕРВЫЙ:

В руководстве MySQL есть два примечания:

Note

Within all stored programs, the parser treats BEGIN [WORK] as the beginning of a BEGIN ... END block. To begin a transaction in this context, use START TRANSACTION instead.

Note

Within all stored programs (stored procedures and functions, triggers, and events), the parser treats BEGIN [WORK] as the beginning of a BEGIN ... END block. Begin a transaction in this context with START TRANSACTION instead.

Я не могу понять, что именно имеется в виду. Они имеют в виду, что я должен поставитьSTART TRANSACTION вместоBEGIN или сразу послеBEGIN?

// 1st variant:

BEGIN
   START TRANSACTION
   COMMIT
END


// 2nd variant:

START TRANSACTION
COMMIT
END

Какой правильный путь, 1-й вариант или 2-й вариант?

ВТОРОЙ:

Я не хочу создавать хранимую процедуру или функцию. Я просто хочу создать блок составного оператора с циклом внутри него в общем потоке, например так:

USE 'someDb';
START TRANSACTION
   ... create table statement
   ... insert statement

// now I want to implement some insert/select statements using loop, I do as follows:

DELIMITER $
BEGIN
  SET @n = 1, @m = 2;
  lab1: LOOP

   ... some insert, select statements here

   END LOOP lab1;
END $
DELIMITER ;

END

COMMIT

Возможна ли такая структура? Потому что я выбросил ошибку:

Query: BEGIN SET @n = 1, @m = 2; lab1: LOOP SELECT ...
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @n = 1, @m = 2;
lab1: LOOP SELECT ...

Мои вопросы:

Is it allowed to use BEGIN...END just in general flow without creating and using Stored Procedures or Functions?

Is it allowed to use BEGIN...END inside of START TRANSACTION...COMMIT or I have to put START TRANSACTION...COMMIT inside of BEGIN...END?

BEGIN
   START TRANSACTION
   COMMIT
END

// vs.

START TRANSACTION
   BEGIN
   END
COMMIT

Do I by all means have to use BEGIN...END if I want to use only LOOP? May I just use LOOP syntax without starting BEGIN...END? The only example in the manual for LOOP is this:

  CREATE PROCEDURE doiterate(p1 INT)
     BEGIN
       label1: LOOP
         ... 

Ответы на вопрос(1)

Ваш ответ на вопрос