MySql存储过程和函数
存储过程
-
创建
Create producere 过程名([参数]) BEGIN ... END;
注: 命令行需要 声明 delimiter 指定SQL语句结束符
-
调用
CALL 过程名[(参数)];
-
查看
SHOW CREATE PRODUCERE 过程名
-
删除
DROP PRODUCERE 过程名
存储语法
-
变量
-
系统变量: GLOBAL 全局(所有会话都有效) 会话变量 SESSION(仅在当前所在的会话有效)
- 查看: SHOW [A|B] VARIABLES;
- SHOW [A|B] VARIABLES like ‘%%’ 模糊匹配
- 设置系统变量
- SET [A|B] 系统变量名 = 值;
-
用户自定义变量
- 不用提前声明
- 用的时候直接 @变量名(@@是系统变量)
- 赋值:
- SET @变量名 = 值[,@变量…]
- SET @变量名 := 值[,@变量…]
- SELECT 字段名 INTO @变量名 from 表名;
- 将从表名中查出来的数据给变量
- 使用: select 字段名;
-
局部变量
-
声明: DECLARE 变量名 变量类型[DEFAULT …];
-
赋值:
-
SET 变量名 = 值
-
SELECT 字段名 INTO @变量名 from 表名;
-
-
范围:Begin…end
-
-
-
if
IF 条件1 THEN ... ELSE IF 条件2 THEN ... ELSE ... END IF;
-
参数
in 输入
OUT 参数作为输出
INTO 包含两者
-
使用
CREATE PRODUCERE name ([A|B|C] 参数名 参数类型) BEGIN .. END;
-- 例子 CREATE PRODUCERE name (in 分数 int,out resault varchar(50)) BEGIN if 分数 >= 100 THEN SET resault = "优秀"; ENDIF; END;
-
-
CASE
相当于 C+ Switch
CASE valu WHEN check1 THEN S1 WHEN check2 THEN S2 ... ELSE Sn END CASE
-
while
While 条件 DO ... END WHILE;
-
repeat
相当于 do while
REPEAT .... UNTIL 条件 END REPEAT;
-
loop
-
LEAVE 相当于BREAK;
-
ITERATE 相当于continue
-
[begin_lable:] LOOP .... END LOOP [end_label]; -- LEAVE label; -- iterate label;
-
简单累加
begin declare a int default 0; sum:loop if a<=0 then leave sum; end if; .... end loop sum; end;
-
-
游标
-
Q:啥是游标
- A:存储查询结果
-
游标声明
DECLARE 游标名称 CURSOR FOR 查询语句;
-
打开游标
OPEN 游标名称;
-
获取游标记录
-
FETCH 游标名称 INTO 变量[,变量];
-
-
关闭
CLOSE 游标名称;
-
解决读取死循环
decleare exit handler for SQLSTATE '02000' close 游标名称
-
存储函数
CREATE FUNCTION 存储函数名称([参数列表])
RETURN type [characteristic]
begin
...
return 值/sql
end
-- chararcteristic
-- DETERMINSTIC:相同输入参数产生相同的结果
-- no sql:不包含SQL
-- READS SQL DATA: 包含读取数据 其他非法
触发器
-
简介:
- 在增删改 操作之后,触发并执行触发器中定义SQL语句的集合
-
触发器类型
- insert触发器
- NEW 表示将要活着已经新增的数据
- UPDATE触发器
- OLD 表示修改之前,NEW表示修改之后
- DELETE触发器
- OLD表示将要活着已经删除的数据
- insert触发器
-
创建触发器
CREATE TRIGGER 触发器名称 BEFOR/AFTER INSERT/UPDATE/DELETE ON 表名 FOR EACH ROW BEGIN ... END;
-
查看
SHOW TRIGGERS;
-
删除
DROP [数据库名.]TRIGGER 触发器名称 -- 若未指定则默认删除当前数据库的
–自增:auto_increment
-
例子
CREATE TRIGGER insert_debug BEFOR/AFTER INSERT ON datas FOR EACH ROW BEGIN insert into inser_log values(null,new.字段1,new.字段2..) END;
- concat(字符串1,字符串2,…)