Mysql入门(十二)之触发器与函数
来源:互联网 发布:网络爬虫系统架构图 编辑:程序博客网 时间:2024/06/05 08:46
触发器
触发器:trigger,事先为某张表绑定好一段代码,当表中的某些内容发生改变的时候(增删改),系统会自动触发代码执行
触发器:事件类型,触发时间,触发对象
事件类型:增删改,三种类型insert,delete和update
触发时间:前后:before和after
触发对象:表中的每一条记录(行)
一张表中只能拥有一种触发时间的一种类型的触发器:最多一张表能有6个触发器
创建触发器
在mysql中:没有大括号,都是用对应的字符符号代替
触发器基本语法
--临时修改语句结束符
delimiter 自定义符号; 后续代码中只有碰到自定义符号才算结束
create trigger 触发器名字 触发时间 事件类型 on 表名 for each row
begin --代表左大括号,开始
--里面就是触发器的内容:每行内容都必须使用语句结束符:分号
end --代表右括号;结束
--语句结束符
自定义符号
--将临时修改修正过来
delimiter ;
查看触发器
查看所有触发器或者模糊匹配
show triggers[like ‘pattern’];
可以查看触发器创建语句
show create trigger 触发器名字;
所有的触发器都会保存一张表中:information_schema.triggers
使用触发器
触发器:不需要手动调用,而是当某种情况发生时会自动触发(订单里面插入记录之后)
修改触发器&&删除触发器
触发器不能修改,只能先删除,后新增
drop trigger 触发器名字;
触发器记录
触发器记录:不管触发器是否触发了,只要当某种操作准备执行,系统就会将当前要操作的记录的当前状态和即将执行之后新的状态
给分别保留下来,供触发器使用:其中,要操作的当前状态保存到old,操作之后的可能形态保存给new
old代表的是旧记录,new代表的是新记录
删除的时候是没有new的,插入的时候是没有old
old和new都是代表记录本身:任何一条记录除了有数据,还有字段名
使用方式:old.字段名/new.字段名(new代表的是假设发生之后的结果)
查看触发器的效果
代码执行结构
代码执行结构有三种:顺序结构,分支结构和循环结构
分支结构
分支结构:实现准备多个代码块,按照条件选择性执行某段代码
在mysql中只有if分支
基本语句
if 条件判断 then
--满足条件要执行的代码;
else
--不满足条件执行的代码;
end if;
触发器结合if分支:判断商品库存是否足够,不够不能生成订单
效果
循环结构
循环结构:某些代码在指定条件执行重复执行。
while 条件判断 do
--满足条件要执行的代码
--变更循环条件
end while;
循环控制:在循环内部进行循环判断和控制
mysql中没有对应continue和break,但是有替代品
iterate:迭代,类似continue,后面的代码不执行,循环重新来过
leave:离开,类似break,这个循环结束
使用方式:itrate/leave 循环名字;
--定义循环名字
循环名字:while 条件 do
--循环体
--循环控制
leave/iterate 循环名字;
end while;
函数
函数:将一段代码块封装到一个结构中,在需要执行代码块的时候,调用结构执行即可(代码复用)
函数分为两类:系统函数和自定义函数
系统函数
系统自定义好的函数,直接调用即可
任何函数都有返回值,因此函数的调用时通过select 调用
mysql中,字符串的基本操作单位(最常见的是字符)
substring:字符串截取(字符为单位)
char_length: 字符长度
length: 字节长度
instr:判断字符串是否在某个具体的字符串中存在,存在返回位置
lpad:左填充,将字符串按照某个指定的填充方式,填充到指定长度(字符)
insert:替换,找到目标位置,指定长度的字符串,替换成目标字符串
strcmp:compare,字符串比较
自定义函数
函数要素:函数名,参数列表(形参和实参),返回值,函数体(作用域)
创建函数
创建语法
create function 函数名([形参列表])returns 数据类型 --规定返回的数据类型
begin
--函数体
--返回值:return类型(指定数据类型);
end
定义函数
自定义函数与系统函数的调用方式是一样:select 函数名([实参列表]);
查看函数
查看所有函数:show function status[like 'pattern'];
查看函数的创建语句:show create function 函数名;
修改函数&删除函数
函数只能先删除后新增,不能修改
drop function 函数名;
函数参数
参数分为两种:定义是的参数叫形参,调用时的参数叫实参(实参可以是数值也可以是变量)
形参:要求必须指定数据类型
function 函数名(形参名字 字段类型)returns 数据类型
在函数内部使用@定义的变量在函数外部也可以访问
作用域
mysql中的作用域与js中的作用域完全一样
全局变量可以在任何地方使用,局部变量只能在函数内部使用
全局变量:使用set关键字定义,使用@符号标志
局部变量:使用declare关键字声明,没有@符号,所有的局部变量的声明,必须在函数体开始之前
0 0
- Mysql入门(十二)之触发器与函数
- MySQL入门之触发器
- MySQL 入门(十二)—— MySQL内部函数
- mysql 学习记录(十二)--触发器
- 我的MYSQL学习心得(十二) 触发器
- 我的MYSQL学习心得(十二) 触发器
- 我的MYSQL学习心得(十二) 触发器
- MySQL 存储过程 触发器 函数 入门
- 【MySQL】触发器入门(转)
- Oracle之函数与触发器
- Oracle之函数与触发器
- Oracle之函数与触发器
- Oracle之函数与触发器
- mysql学习笔记之十二(存储过程和函数)
- 《MySQL入门很简单》学习笔记(9)之第9章触发器(关键词:数据库/MySQL/触发器)
- MySql触发器之入库与出库
- mysql入门(存储引擎二十二)
- MySQL 入门(八)—— 触发器
- Java 邮件发送
- centos yum mongo3.2
- 深入理解JavaScript系列--------强大的原型和原型链
- eclispe中的maven项目使用spring报java.lang.ClassNotFoundException: org.springframework.web.c
- Java中的多线程
- Mysql入门(十二)之触发器与函数
- 面试笔试--http知识点
- 属性的封装和方法的使用
- JavaScript强化教程——数组的基本处理函数
- Qt:error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1600”不匹配值“1800
- Android中JNI的使用方法
- ueditor的使用
- [原创]react native 注意事项
- 上下文ServletContext的使用,记录网站的登录人数统计