[begin_label
:] BEGIN [statement_list
] END [end_label
]
BEGIN ... END
syntax is used for writing compound statements, which can appear
within stored programs. A compound statement can contain multiple
statements, enclosed by the BEGIN
and
END
keywords.
statement_list
represents a list of one
or more statements, each terminated by a semicolon
(;
) statement delimiter.
statement_list
is optional, which means
that the empty compound statement (BEGIN END
)
is legal.
Use of multiple statements requires that a client is able to send
statement strings containing the ;
statement
delimiter. This is handled in the mysql
command-line client with the delimiter
command.
Changing the ;
end-of-statement delimiter (for
example, to //
) permit ;
to
be used in a program body. For an example, see
Section 19.1, “Defining Stored Programs”.
A BEGIN ...
END
block can be labeled. Labels follow these rules:
end_label
cannot be given unlessbegin_label
is also present.If both
begin_label
andend_label
are present, they must be the same.Labels can be up to 16 characters long.
Labels are also permitted for the
LOOP
,
REPEAT
,
and
WHILE
statements.
The optional [NOT] ATOMIC
clause is not
supported. This means that no transactional savepoint is set at
the start of the instruction block and the
BEGIN
clause used in this context has no effect
on the current transaction.
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.