### 13.6.1 BEGIN ... END 复合语句

[](<>)[](<>)

```
[begin_label:] BEGIN
    [statement_list]
END [end_label]
```

[`开始...结束`](begin-end.html)语法用于编写复合语句，这些语句可以出现在存储程序（存储过程和函数、触发器和事件）中。复合语句可以包含多个语句，由`开始`和`结尾`关键词。*`声明列表`*表示一个或多个语句的列表，每个语句以分号 (`;`) 语句分隔符。这*`声明列表`*本身是可选的，所以空的复合语句 (`开始结束`) 是合法的。

[`开始...结束`](begin-end.html)块可以嵌套。

使用多个语句要求客户端能够发送包含`;`语句分隔符。在里面[**mysql**](mysql.html)命令行客户端，这是用`分隔符`命令。改变`;`语句结束分隔符（例如，`//`） 允许`;`在程序主体中使用。例如，请参阅[第 25.1 节，“定义存储程序”](stored-programs-defining.html).

一种[`开始...结束`](begin-end.html)块可以被标记。看[第 13.6.2 节，“语句标签”](statement-labels.html).

可选的`[非] 原子的`不支持子句。这意味着在指令块的开头没有设置事务保存点，并且`开始`在此上下文中使用的子句对当前事务没有影响。

笔记

在所有存储的程序中，解析器将[`开始[工作]`](commit.html)作为一个开始[`开始...结束`](begin-end.html)堵塞。要在此上下文中开始事务，请使用[`开始交易`](commit.html)反而。
