MySQL函数与触发器

一、存储函数

1、定义存储函数

create function 函数名(参数1 数据类型1 [,参数2 数据类型2...])returns 返回值类型 begin

任意系列SQL语句

return 返回值;

end

1)参数只有输入类型,在存储过程中参数可以是in(输入)、out(输出)、inout(输入输出)三种类型

2)向调用者返回结果值

如计算自然数阶乘

delimiter // 中间有空格

MySQL函数与触发器_第1张图片

2、确认创建成功的存储函数

mysql> show function status\G --可以查看是否创建成功

mysql> show create function fn_factorial\G --查看函数的定义内容,即源码

MySQL函数与触发器_第2张图片

3、调用函数

SELECT fn_factorial(5),fn_factorial(3);

 

二、触发器

1、创建触发器

create trigger 触发器名 发生时刻 事件名

on 表名 for each row

begin

任意系列sql语句

end

1)指定成为触发器调用方的表名

触发器不是直接被调用运行的,而是针对具体的表的操作时被调用,也就是说在创建触发器时必须指定一个表

2)决定触发器运行的时刻

3)[for each row]为固定值

2、定义触发器

如:建一个触发器用来给删除的数据备份

先建一个与原表一样的空表customer_history

MySQL函数与触发器_第3张图片

mysql> delimiter //

mysql> create trigger trg_customer_history after delete --触发器名

-> on customer for each row

-> begin

-> insert into customer_history (mid,nam,birth,sex)

-> values(old.mid,old.nam,old.birth,old.sex);

-> end

-> //

3、确认创建触发器完成

mysql> show triggers\G

MySQL函数与触发器_第4张图片

 

项目

说明

Trigger

触发器名

Event

启动触发器的事件名(insert|update|delete)

Table

触发器启动对象表名

Statement

触发器启动时执行的命令

Timing:

启动时刻(before|after)

Created

未使用项目(始终为null)

sql_mode

触发器执行时的sql模式

Definer

触发器作者

character_set_client

从客户端传过来的查询的字符编码

collation_connection

当前连接中使用的对照顺序

Database Collation

数据库的对照顺序

4、删除触发器

drop trigger 触发器名

5、测试触发器

MySQL函数与触发器_第5张图片

 

三、游标

1、创建游标

MySQL函数与触发器_第6张图片

mysql> delimiter //

mysql> create procedure sp_cursor(out p_result text)

-> begin

-> declare flag bit default 0;

-> declare tmp varchar(20);

--声明游标

-> declare cur cursor for select distinct depart from employee;

-> declare continue handler for not found set flag=1;

--打开游标

-> open cur;

--从游标中读取一行数据

-> while flag != 1 do

-> fetch cur into tmp;

--标志变量flag非1时进行如下处理

-> if flag != 1 then

-> set p_result =concat_ws(',',p_result,tmp);

-> end if;

-> end while;

--关闭游标

-> close cur;

-> end

-> //

1)声明游标

declare 游标名 cursor for select语句

2)打开游标

open 游标名

3)从指针中取得记录数据

fetch 游标名 into 变量名

4)读取了所有游标记录后的处理

declare 处理类 handler for 例外的种类 例外发生时的处理

5) 关闭游标

close 游标名

2、用游标后,测试存储过程

 

MySQL函数与触发器_第7张图片

 

 

你可能感兴趣的:(数据库MySQL)