MySQL 的 BEGIN ... END 复合语句

本文将介绍 MySQL 的 BEGIN .. .END 复合语句。

BEGIN ... END 复合语句

BEGIN ... END 复合语句语法如下:

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

BEGIN ... END 语法用于编写复合语句,这些语句可以出现在存储程序(存储过程和函数、触发器和事件)中。一个复合语句可以包含多个语句,由 BEGIN 和 END 关键字括起来。statement_list 表示一个或多个语句的列表,每个语句以分号(;)语句分隔符结束。statement_list 本身是可选的,因此空的复合语句(BEGIN END)也是合法的。

BEGIN ... END 块可以嵌套

使用多语句要求客户端能够发送包含 “;” 语句分隔符的语句字符串。在 mysql 命令行客户端中,这可以通过分隔符命令(delimiter)来处理。更改 “;” 语句结束分隔符(例如,改为 // )允许在程序正文中使用 “;” 例如:

-- 修改分隔符为 //
mysql> delimiter //

-- 创建一个存储过程 demo,其中包含了 ; 符号
mysql> create procedure demo()
-> begin
->   select now();
-> end
-> //
Query OK, 0 rows affected

-- 分隔符修改回默认的 ;
mysql> delimiter ;

-- 调用存储过程
mysql> call demo();
+---------------------+
| now() |
+---------------------+
| 2023-09-27 14:53:32 |
+---------------------+
1 row in set
Query OK, 0 rows affected

注意,BEGIN ... END 代码块可以被标记。例如:

label1: BEGIN
 select now();
END;

不支持可选的 [NOT] ATOMIC 子句。这意味着在指令块开始时不会设置事务保存点,在这种情况下使用的 BEGIN 子句对当前事务没有影响。

注意:在所有存储程序中,解析器将 BEGIN [WORK] 视为 BEGIN...END 块的开始。要在这种情况下开始事务,请使用 START TRANSACTION 代替。

成熟不是人的心变老,而是泪在眼眶里打转还能微笑。
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号