MySQL——自定义[存储]函数、触发器
一. 编程基础
1) 结束符

2) 代码块
Begin 相当于 {
end; 相当于 }
1. 变量
系统变量
Show variables;
查看系统变量sql_mode

会话变量
Set @变量名=值;

局部变量 // 在函数或过程内部定义的变量
Declare 变量名 类型 default 默认值; Declare I int default 0;
2. 循环while
变量初始化; [名称]:While 条件判断 do 循环体; 增量; End 空格 while;
delimiter //
create function mywhile(n int) returns int
begin
declare i int default 0;
declare sum int default 0; while i <= n do
set sum = sum + i;
set i = i +1;
end while;
return sum;
end;
//
delimiter ;
调用函数:
select mywhile(100);
3. 判断if
If 条件 then
return 返回值;
Elseif 条件 then
return 返回值;
Else
return 返回值;
End if;
delimiter //
create function checkuser(name varchar(11)) returns varchar(11)
begin
if name = 'admin' then
return "ok";
else
return "no";
end if;
end;
//
delimiter ;
二.自定义[存储]函数
1) 创建自定义函数
Create Function 名称(参数 数据类型) returns 数据类型 说明: create function 关键字
名称 //自定义函数名称,用来调用.
([参数 数据类型]) //形参为可选
Returns 数据类型 //指明返回值的类型, 注意:returns
注意:自定义函数体中必须有返回值 使用关键字return 没有参数的:

delimiter //
create function test() returns varchar(11)
begin
return 'ok';
end;
//
delimiter ;

2) 调用函数
Select 函数名称([参数]);
说明: select 函数名称([参数]) // 根据定义函数时形参. ,形参与实参保持一致.
3) 查看创建函数信息
show create function 函数名称 \G
4) 查看所有自定义函数
show function status \G
5) 删除自定义函数
Drop function 函数名称;
如果当前数据库不是db_five
Drop function db_five.mywhile;
自定义函数中可以执行的SQL语句: delete, update,insert

三.存储过程
概念: 存储过程就是一条或多条SQL语句的集合.即没有返回值的存储函数
delimiter //
create procedure myselect()
begin
select * from student;
end;
//
delimiter ;
1. 定义存储过程
Create procedure 过程名称(in 参数 类型,out 参数 类型 inout 参数 类型)
说明:
1) Create procedure // 创建过程关键字
2) In 参数 数据类型 (默认) //类似于php中的拷贝传值
3) Out 参数 数据类型 //类似于php中的引用传值, 传递到过程中将这个变量赋值为NULL;
4) Inout 参数 数据类型 //类似于php中的引用传值;
delimiter //
create procedure mytest(in a int, out b int,inout c int)
begin
select a,b,c;
set a=11,b=22,c=33;
select a,b,c;
end;
//
delimiter ;

2. 调用存储过程
Call 过程名称( [参数])
3. 查看创建存储过程信息
Show create procedure 过程名称

4. 查看所有存储过程
Show procedure status \G
5. 删除存储过程
Drop procedure 过程名称
四.触发器
概念: 触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE和DELETE语句。当执行这些事件时,就会激活触发器执行相应的操作。
1. 创建触发器
create trigger 名称 after|before 事件 insert|update|delete on 表名 for each row
说明:
1) Create trigger //创建触发器的关键字
2) 名称
3) After|before , 触发时机
4) insert|update|delete //事件
5) on 表名 //作用于哪张表
6) for each row //触发器是基于行.
nowtime //id,nowtime;
nowuser //id,name 在用户表中添加用户时,通过触发器会自动在nowtime表中将当前的时间添加 delimiter //
create trigger tg1 after insert on nowuser for each row
begin
insert into nowtime values (null,now());
end;
//
delimiter ;
2. 两个关键字: new, old
在触发器中,当触发事件发生时,
new : 代表新行, old: 代表旧行
insert 操作: 成功之后,其后会自动产生一行新的数据. 在触发器中通过new获取新行字段值
delete 操作, 其成功之后, 对旧行数据进行删除,在触发器中可以通过old获取旧行字段值
update操作: 其会对原有的旧行,更新为新行. 既有新行又有旧行
insert 事件
delimiter //
create trigger tg1 after insert on tb_order for each row
begin
update tb_goods set inv = inv - new.num where id = new.pid;
end;
//
delimiter ;
Delete 事件:
-- delete
delimiter //
create trigger tg2 after delete on tb_order for each row
BEGIN
update tb_goods set inv = inv + old.num where id = old.pid;
end;
//
delimiter ;

Update 事件:
New,old
delimiter //
create trigger tg3 after update on tb_order for each row
begin
update tb_goods set inv = inv + old.num - new.num where id = old.pid;
end;
//
delimiter ;

3. 显示所有触发器
Show triggers \G
4. 删除触发器
Drop trigger 触发器名称
MySQL——自定义[存储]函数、触发器的更多相关文章
- Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表. ---查询语句创建表 create table emp a ...
- MySQL的存储函数(自定义函数)的定义和使用方法
存储函数 什么是存储函数: 封装一段sql代码,完成一种特定的功能,返回结果. 存储函数的语法: create function 函数([函数参数[,….]]) Returns 返回类型 Begin ...
- Oracle数据库游标,序列,存储过程,存储函数,触发器
游标的概念: 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理, ...
- oracle存储过程和存储函数&触发器
oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...
- mysql中(存储)函数
(存储)函数: 函数,也说成“存储函数”,其实就是js或php中所说的函数! 唯一的区别: 这里的函数必须返回一个数据(值): 定义形式: 注意事项: 1, 在函数内部,可以有各种变量和流程控制的使用 ...
- MYSQL的存储函数
创建存储函数与创建存储过程大体相同,格式如下: create function sp_name([func_parameter[,...]]) returns type [characteristic ...
- PL/SQL&存储过程||存储函数&触发器
plsql 有点:交互式 非过程化 数据操纵能力强 自动导航语句简单 调试简单 想率高 声明类型的方式 1.基本类型 2.引用变量 3.记录型变量 基本格式 declare 声明 b ...
- MySQL自定义排序函数FIELD()
MySQL可以通过field()函数自定义排序,格式:field(value,str1,str2,str3,str4),value与str1.str2.str3.str4比较,返回1.2.3.4,如遇 ...
- MYSQL 自定义序列函数
代码如下: DROP TABLE SEQNUM; -- 创建序列表 CREATE TABLE SEQNUM( ID BIGINT ); -- 插入初识值 insert INTO SEQNUM valu ...
随机推荐
- vue.js axios实现跨域http请求接口
跨域post实例,用到了qs组件来避开ajax信使请求,并兼容Android. import axios from 'axios'; import qs from 'qs'; axios.post(' ...
- [欧拉路]CF1152E Neko and Flashback
1152E - Neko and Flashback 题意:对于长为n的序列c和长为n - 1的排列p,我们可以按照如下方法得到长为n - 1的序列a,b,a',b'. ai = min(ci, ci ...
- Django项目:CMDB(服务器硬件资产自动采集系统)--09--06CMDB测试Linux系统采集硬件数据的命令04
root 123456 ip addr init 0 root 123456 ip addr root 123456 python3 yum -y install zlib-devel bzip2-d ...
- resin乱码
一.jsp乱码 为何jsp 在resin下乱码,但在tomcat下却工作良好的问题 关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncodi ...
- Jeecg-Boot 开发环境准备(二):开发工具安装
目录索引: 后端开发工具 前端开发工具 Nodejs镜像 WebStorm入门配置 JeecgBoot采用前后端分离的架构,官方推荐开发工具 前端开发: Webstrom 或者 IDEA 后端开发: ...
- [转载] 使用C/C++语言编写基于DSP程序的注意事项
原文地址:『转』使用C/C++语言编写基于DSP程序的注意事项作者:skysmile 1.不影响执行速度的情况下,可以使用c或c/c++语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师 ...
- PL/SQl连接数据库ORA-12154错误
先说说我遇到的问题: 1.在sql/plus下可以正确连接到数据库(oracle10g): 2.检查我机器(64)位环境变量的配置,没问题.path环境变量没问题(C:\oraclexe\app\or ...
- Kotlin 委托(1)类委托、变量委托注意事项
1.官方文档 英文: https://kotlinlang.org/docs/reference/delegation.html https://kotlinlang.org/docs/referen ...
- 微信Web开发者工具报错:net::ERR_BLOCKED_BY_CLIENT
今天在微信调试琳德的拼团,用了挺久之后,输入什么测试地址:发现页面空白,console提示身份验证网址错误,错误类型为:net::ERR_BLOCKED_BY_CLIENT, 尝试了好多次.以为是我的 ...
- Eclipse-搭建springboot项目报错
Eclipse Maven pom报错: org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.Ma ...