MySQL函数与触发器

一、存储函数

1、定义存储函数

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

任意系列SQL语句

return 返回值;

end

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

2)向调用者返回结果值

如计算自然数阶乘

delimiter // 中间有空格

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

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

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

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> 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

 

项目

说明

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、测试触发器

 

三、游标

1、创建游标

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、用游标后,测试存储过程

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简书-乡村码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值