作者:jessiemiumiu_956 | 来源:互联网 | 2023-09-07 17:21
目录 一、变量 二、定义条件和处理程序 三、流程控制 四、游标
一、变量
1.1 系统变量 由系统定义,不是用户定义,属于服务器层面。启动MySQL服务,生成MySQL服务实例期间,MySQL将为MySQL服务器内存中的系统变量赋值,这些系统变量定义了当前MySQL服务实例的属性、特征。这些系统变量的值要么是编译MySQL时参数的默认值,要么是 配置文件(例如my.ini等)中的参数值。 系统变量分为全局系统变量(需要添加 global 关键字)以及会话系统变量(需要添加 session 关键字),有时也把全局系统变量简称为全局变量,有时也把会话系统变量称为local变量。如果不写,默认会话级别。
SHOW GLOBAL VARIABLES; SHOW SESSION VARIABLES; SHOW VARIABLES; SHOW GLOBAL VARIABLES LIKE '%标识符%' ; SHOW SESSION VARIABLES LIKE '%标识符%' ; SELECT @@global. 变量名; SELECT @@session. 变量名; SELECT @@变量名; SET @@global. 变量名= 变量值; SET SESSION 变量名= 变量值;
1.2 用户变量 用户变量是用户自己定义的,作为 MySQL 编码规范,MySQL 中的用户变量以 一个“@” 开头。根据作用范围不同,又分为会话用户变量和局部变量 。
会话用户变量:作用域和会话变量一样,只对 当前连接 会话有效。 局部变量:只在 BEGIN 和 END 语句块中有效。局部变量只能在存储过程和函数中使用。 SET @用户变量 = 值; SET @用户变量 := 值; SELECT @用户变量 := 表达式[ FROM 等子句] ; SELECT 表达式 INTO @用户变量 [ FROM 等子句] SELECT @用户变量; DECLARE 变量名1 变量数据类型 [ DEFAULT 变量默认值] ; DECLARE 变量名2 , 变量名3 , . . . 变量数据类型 [ DEFAULT 变量默认值] ; SET 变量名1 = 值; SELECT 值 INTO 变量名2 [ FROM 子句] ; SELECT 变量名1,变量名2,变量3;
二、定义条件和处理程序
定义条件是事先定义程序执行过程中可能遇到的问题, 处理程序 定义了在遇到问题时应当采取的处理方 式,并且保证存储过程或函数在遇到警告或错误时能继续执行。这样可以增强存储程序处理问题的能 力,避免程序异常停止运行。
2.1 定义条件 定义条件就是给MySQL中的错误码命名(错误名称自定义)
DECLARE 错误名称 CONDITION FOR 错误码(或错误条件)
错误码
DECLARE Field_Not_Be_NULL CONDITION FOR 1048 ; DECLARE Field_Not_Be_NULL CONDITION FOR SQLSTATE '23000' ;
2.2 定义处理程序 可以为SQL执行过程中发生的某种类型的错误定义 特殊的处理程序。
DECLARE 处理方式 HANDLER FOR 错误类型 处理语句CONTINUE :表示遇到错误不处理,继续执行EXIT :表示遇到错误马上退出 UNDO:表示遇到错误后撤回之前的操作(MYSQL不支持) SQLSTATE '字符串错误码' :表示长度为5 的sqlstate_value类型的错误代码; MySQL_error_code :匹配数值类型错误代码; 错误名称 :表示DECLARE . . . CONDITION定义的错误条件名称。 SQLWARNING :匹配所有以01 开头的SQLSTATE错误代码;NOT FOUND :匹配所有以02 开头的SQLSTATE错误代码; SQLEXCEPTION :匹配所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE错误代码; 如果出现上述条件之一,则采用对应的处理方式,并执行指定的处理语句。语句可以是 像“ SET 变量 = 值 ”这样的简单语句,也可以是使用 BEGIN . . . END 编写的复合语句。
三、流程控制
流程就分为三大类:顺序结构、分支结构、循环结构。
条件判断语句:条件判断语句 循环语句:LOOP 、WHILE 和REPEAT 语句 跳转语句:ITERATE 和LEAVE 语句
3.1 分支结构 IF语法结构
IF 表达式1 THEN 操作1 [ ELSEIF 表达式2 THEN 操作2 ] …… [ ELSE 操作N] END IF
CASE语法结构
CASE 表达式 WHEN 值1 THEN 结果1 或语句1 ( 如果是语句,需要加分号) WHEN 值2 THEN 结果2 或语句2 ( 如果是语句,需要加分号) . . . ELSE 结果n或语句n( 如果是语句,需要加分号) END [ case ] (如果是放在begin end 中需要加上case ,如果放在select 后面不需要)CASE WHEN 条件1 THEN 结果1 或语句1 ( 如果是语句,需要加分号) WHEN 条件2 THEN 结果2 或语句2 ( 如果是语句,需要加分号) . . . ELSE 结果n或语句n( 如果是语句,需要加分号) END [ case ] (如果是放在begin end 中需要加上case ,如果放在select 后面不需要)
3.2 循环结构 LOOP语法结构
[ loop_label:] LOOP 循环执行的语句 END LOOP [ loop_label]
WHILE语法结构
[ while_label:] WHILE 循环条件 DO 循环体 END WHILE [ while_label] ;
REPEAT语法结构
[ repeat_label:] REPEAT 循环体的语句 UNTIL 结束循环的条件表达式 END REPEAT [ repeat_label]
跳转语句LEAVE语法结构
LEAVE 标记名
跳转语句ITERATE语法结构
ITERATE label
四、游标
结果集定位到某一 条记录,并对记录的数据进行处理。
游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针
声明游标
DECLARE cursor_name CURSOR FOR select_statement; DECLARE cursor_name CURSOR IS select_statement;
打开游标
OPEN cursor_name
使用游标
FETCH cursor_name INTO var_name [ , var_name] . . .
关闭游标
CLOSE cursor_name