MySQL 8.0 リファレンスマニュアル


13.6.1 BEGIN ... END 複合ステートメント

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

BEGIN ... END 構文は、ストアドプログラム (ストアドプロシージャーとストアドファンクション、トリガー、およびイベント) 内に指定できる複合ステートメントを記述するために使用されます。 複合ステートメントには、BEGIN および END キーワードで囲まれた複数のステートメントを含めることができます。statement_list は、それぞれがセミコロン (;) ステートメント区切り文字で終了する 1 つ以上のステートメントのリストを表します。 statement_list 自体がオプションであるため、空の複合ステートメント (BEGIN END) は正当です。

BEGIN ... END ブロックはネストできます。

複数のステートメントを使用するには、クライアントが ; ステートメント区切り文字を含むステートメント文字列を送信できる必要があります。 mysql コマンド行クライアントでは、これは delimiter コマンドで処理されます。 ステートメント終了の区切り文字 ; を (たとえば、// に) 変更すると、プログラム本体での ; の使用が許可されます。 例については、セクション25.1「ストアドプログラムの定義」を参照してください。

BEGIN ... END ブロックにはラベルを付けることができます。 セクション13.6.2「ステートメントラベル」を参照してください。

オプションの [NOT] ATOMIC 句はサポートされていません。 つまり、この命令ブロックの先頭でトランザクションセーブポイントは設定されず、このコンテキストで使用されている BEGIN 句は現在のトランザクションに影響を与えません。

注記

すべてのストアドプログラム内で、パーサーは、BEGIN [WORK]BEGIN ... END ブロックの開始として扱います。 このコンテキストでトランザクションを開始するには、代わりに START TRANSACTION を使用します。


関連キーワード:  ステートメント, CREATE, TABLE, DROP, サブクエリー, FUNCTION, SLAVE, 関数, トランザクション, REPLICA