Mysql触发器、视图、函数和存储过程

触发器:

触发器用来在某些操作时,“自动”执行一些操作
当insert delete update 设置触发器之后,执行insert delete update 操作就会自动触发设置的内容
(一张表最大能有6个触发器 32.三种操作两种时间(before/after))
语法:create trigger 触发器名 before|after 事件 on 表名 for each row 触发器语句

mysql查看触发器:
展示所有触发器:show triggers\G
在information_schema中查看triggers表:
slect * from information_schema.triggers

delimiter && 将结束符改为&&,一般建议为@@ 或$$在这里插入图片描述多个触发语句:
需要将多条语句包含在begin end 中
create trigger 触发器名
before|after
insert|update|delete
on 表名
for each row
begin
触发语句1;触发语句2;触发语句3;…触发语句n;
end;

触发器主要事件:
insert:新增记录,没有旧纪录;
update:删除旧纪录,没有新纪录;
delete:有变更后的新纪录,也有被变更的旧纪录
可以使用old|new来引用这些记录:
for each row
insert into 记录表 values(old.xxx,new.yyy);
update 触发语句;
在这里插入图片描述

mysql视图:

视图是存储在数据库中的查询的sql语句
是一个虚拟表,其内容由查询定义
视图在数据库中默认没有物理存储,相当于临时表
优点:
简单化,数据所见即所得
安全性。
逻辑独立性
**缺点:**性能差,修改不方便
作用:
提高重用性
对外接口稳定
提高安全性
目的更明确,数据更清晰
创建语法:
{ CREATE|REPLACE } [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW 视图名 [{属性列名}] AS SELECT_STATEMENT(查询语句)
[WITH [CASCADED | LOCAL |] CHECK OPTION]
ALGORITHM:视图算法(1、默认;2、合并(视图和外层语句合并后执行);3、结果存入临时表)
视图的使用:与查询表的语句类似

存储过程与UDF函数:

存储过程与函数的相同点:
都是一系列sql语句的集合,调用时一次性执行这些sql语句,与java中方法的概念类似
都是对MySQL功能的扩展

存储过程与函数的不同点:
存储过程没有返回值,函数有一个返回值
存储过程注重的是执行过程,函数注重的是返回值

mysql流程控制语句:
流程控制不能直接写在sql语句里
create procedure存储过程名(参数列表)
begin
sql语句
end;
调用:call 存储过程名();

mysql流程控制语句详解:

引用链接:http://c.biancheng.net/view/7853.html
1.if语句
IF 语句用来进行条件判断,根据是否满足条件(可包含多个条件),来执行不同的语句,是流程控制中最常用的判断语句。其语法的基本形式如下:
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list]…
[ELSE statement_list]
END IF
其中,search_condition 参数表示条件判断语句,如果返回值为 TRUE ,相应的 SQL 语句列表(statement_list)被执行;如果返回值为 FALSE,则 ELSE 子句的语句列表被执行。statement_list 可以包括一个或多个语句。
注意:MySQL 中的 IF( ) 函数不同于这里的 IF 语句。
例 1
下面是一个使用 IF 语句的示例。代码如下:
IF age>20 THEN SET @count1=@count1+1;
ELSEIF age=20 THEN @count2=@count2+1;
ELSE @count3=@count3+1;
END lF;
该示例根据 age 与 20 的大小关系来执行不同的 SET 语句。如果 age 值大于20,那么将 count1 的值加 1;如果 age 值等于 20,那么将 count2 的值加 1;其他情况将 count3 的值加 1。IF 语句都需要使用 END IF 来结束。

2. CASE语句
CASE 语句也是用来进行条件判断的,它提供了多个条件进行选择,可以实现比 IF 语句更复杂的条件判断。CASE 语句的基本形式如下:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]…
[ELSE statement_list]
END CASE
其中:
case_value 参数表示条件判断的变量,决定了哪一个 WHEN 子句会被执行;
when_value 参数表示变量的取值,如果某个 when_value 表达式与 case_value 变量的值相同,则执行对应的 THEN 关键字后的 statement_list 中的语句;
statement_list 参数表示 when_value 值没有与 case_value 相同值时的执行语句。
CASE 语句都要使用 END CASE 结束。

CASE 语句还有另一种形式。该形式的语法如下:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] …
[ELSE statement_list]
END CASE
其中,search_condition 参数表示条件判断语句;statement_list 参数表示不同条件的执行语句。

与上述语句不同的是,该语句中的 WHEN 语句将被逐个执行,直到某个 search_condition 表达式为真,则执行对应 THEN 关键字后面的 statement_list 语句。如果没有条件匹配,ELSE 子句里的语句被执行。
这里介绍的 CASE 语句与“控制流程函数”里描述的 SQL CASE 表达式的 CASE 语句有轻微的不同。这里的 CASE 语句不能有 ELSE NULL 语句,并且用 END CASE 替代 END 来终止。

例 2
下面是一个使用 CASE 语句的示例。代码如下:
CASE age
WHEN 20 THEN SET @count1=@count1+1;
ELSE SET @count2=@count2+1;
END CASE;
代码也可以是下面的形式:
CASE
WHEN age=20 THEN SET @count1=@count1+1;
ELSE SET @count2=@count2+1;
END CASE;
本示例中,如果 age 值为 20,count1 的值加 1,否则 count2 的值加 1。

3. LOOP 语句
LOOP 语句可以使某些特定的语句重复执行。与 IF 和 CASE 语句相比,LOOP 只实现了一个简单的循环,并不进行条件判断。

LOOP 语句本身没有停止循环的语句,必须使用 LEAVE 语句等才能停止循环,跳出循环过程。LOOP 语句的基本形式如下:
[begin_label:]LOOP
statement_list
END LOOP [end_label]
其中,begin_label 参数和 end_label 参数分别表示循环开始和结束的标志,这两个标志必须相同,而且都可以省略;statement_list 参数表示需要循环执行的语句。
例 3
使用 LOOP 语句进行循环操作。代码如下:
add_num:LOOP
SET @count=@count+1;
END LOOP add_num;
该示例循环执行 count 加 1 的操作。因为没有跳出循环的语句,这个循环成了一个死循环。LOOP 循环都以 END LOOP 结束。

4. LEAVE 语句
LEAVE 语句主要用于跳出循环控制。其语法形式如下:
LEAVE label

其中,label 参数表示循环的标志,LEAVE 语句必须跟在循环标志前面。
例 4
下面是一个 LEAVE 语句的示例。代码如下:
add_num:LOOP
SET @count=@count+1;
IF @count=100 THEN
LEAVE add_num;
END LOOP add num;
该示例循环执行 count 加 1 的操作。当 count 的值等于 100 时,跳出循环。

5. ITERATE 语句
ITERATE 是“再次循环”的意思,用来跳出本次循环,直接进入下一次循环。ITERATE 语句的基本语法形式如下:
ITERATE label

其中,label 参数表示循环的标志,ITERATE 语句必须跟在循环标志前面。
例 5
下面是一个 ITERATE 语句的示例。代码如下:
add_num:LOOP
SET @count=@count+1;
IF @count=100 THEN
LEAVE add_num;
ELSE IF MOD(@count,3)=0 THEN
ITERATE add_num;
SELECT * FROM employee;
END LOOP add_num;
该示例循环执行 count 加 1 的操作,count 值为 100 时结束循环。如果 count 的值能够整除 3,则跳出本次循环,不再执行下面的 SELECT 语句。
说明:LEAVE 语句和 ITERATE 语句都用来跳出循环语句,但两者的功能是不一样的。LEAVE 语句是跳出整个循环,然后执行循环后面的程序。而 ITERATE 语句是跳出本次循环,然后进入下一次循环。使用这两个语句时一定要区分清楚。

6. REPEAT 语句
REPEAT 语句是有条件控制的循环语句,每次语句执行完毕后,会对条件表达式进行判断,如果表达式返回值为 TRUE,则循环结束,否则重复执行循环中的语句。

REPEAT 语句的基本语法形式如下:
[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]

其中:
begin_label 为 REPEAT 语句的标注名称,该参数可以省略;
REPEAT 语句内的语句被重复,直至 search_condition 返回值为 TRUE。
statement_list 参数表示循环的执行语句;
search_condition 参数表示结束循环的条件,满足该条件时循环结束。
REPEAT 循环都用 END REPEAT 结束。
例 6
下面是一个使用 REPEAT 语句的示例。代码如下:
REPEAT
SET @count=@count+1;
UNTIL @count=100
END REPEAT;
该示例循环执行 count 加 1 的操作,count 值为 100 时结束循环。

7. WHILE 语句
WHILE 语句也是有条件控制的循环语句。WHILE 语句和 REPEAT 语句不同的是,WHILE 语句是当满足条件时,执行循环内的语句,否则退出循环。WHILE 语句的基本语法形式如下:
[begin_label:] WHILE search_condition DO
statement list
END WHILE [end label]

其中,search_condition 参数表示循环执行的条件,满足该条件时循环执行;statement_list 参数表示循环的执行语句。WHILE 循环需要使用 END WHILE 来结束。
例 7
下面是一个使用 WHILE 语句的示例。代码如下:
WHILE @count<100 DO
SET @count=@count+1;
END WHILE;
该示例循环执行 count 加 1 的操作,count 值小于 100 时执行循环。如果 count 值等于 100 了,则跳出循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值