MySQL-存储过程与触发器
Posted sunjingjingking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL-存储过程与触发器相关的知识,希望对你有一定的参考价值。
mysql 存储过程
定义:
一组为了完成特定功能的SQL语句集,存储在数据库中经过
第一次编译后再次调用不需要再次编译,用户通过指定存储过程
的名字并给出参数来执行它。
优点:
1、增强SQL语言的功能和灵活
2、标准组件式编程,预编译!
3、较快的执行速度
4、减少网络流量
5、保证数据的安全
缺点:
1、可移植性差
2、统一标准,后期维护大。
一、定义存储过程
语法:
create procedure 过程名(参数1,参数2)
begin
SQL语句
end
#要先修改mysql结束符号,delimiter 新的符号 可以是%或者//
delimiter //
例子:
delimiter //
create procedure fun()
begin
select * from mysql.user;
end//
#调用存储过程
语法:
call 过程名(参数1,参数2);
例子:
call fun//
二、存储过程的参数类型
#mysql定义变量方法
语法格式: set @字段名=值
例如:
set @num=1
1、In ,传入参数
特点:读取外部变量值,传给存储过程来使用的!
例子:
set @num=1
create procedure fun(in sun int)
begin
select sun; #查询变量
set sun=2;
select sun;
end //
call fun(@num)
2、Out 参数 传出参数
特点:不读取外部变量,在存储过程执行完毕后保留新值
例子:
create procedure fun(out sun int)
begin
set sun=1;
select sun;
end //
call fun(@abc) #赋值给变量,把变量变成局部变量!
select @abc #查询变量值
3、参数inout
特点:读取外部变量,在存储过程执行完后保留新值,传进来,又传出去!
例子:
set @ccc=4
create procedure fun(inout sun int)
begin
select sun;
set sun=3
end //
call fun(@ccc) #传入变量
select @ccc #查看变量的变化值
三、存储内部定义变量
#存储过程变量使用
MySQL使用declare 进行变量定义
变量定义:
declare var_name datatype
declare name varchar(200);
例子:
create procedure fun()
begin
declare var_name int;
set var_name=2;
select var_name;
end //
call fun;
#存储过程的注释
"--" :单行注释
"/*..*/":一般用于多行注释
#查看和删除存储过程
show create procedure 过程名 G #查看单个
show procedure status g; #查看所有存储过程
drop procedure 过程名;
四、存储循环语句
1、while var <0 do --- end while
create procedure fun()
begin
declare i int;
set i=1;
while i<3 do
set i=i+1;
select i;
end while;
end //
2、LOOP_LABLE:loop ...if i>1 then ...leave LOOP_LABLE end if--- end loop
use mysql
create procedure fun()
begin
declare i int;
set i=1;
LOOP_LABLE:loop
set i=i+1;
select i;
if i >4 then
leave LOOP_LABLE;
end if;
end loop;
end //
3、repeat ---until(条件)-- end repeat
create procedure fun(n1 int)
begin
repeat set @[email protected]+1; #循环
insert into t_name values(@x);
until @x>n1 #达到条件就结束
end repeat; #结束循环
end;;
call t2(5)
五、触发器
触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力
#触发器作用:
1.安全性
2.审计
3.实现复杂的非标准的数据库相关完整性规则。
4.实现复杂的数据完整性规则
5.实时同步地复制表中的数据
6.自动计算数据值
#触发器语法:
语法:
create trigger 触发器名称 触发的时机 触发的动作 on 表名 for each row 触发器状态。
参数说明:
触发器名称: 自己定义
触发的时机: before /after 在执行动作之前还是之后
触发的动作 :指的激发触发程序的语句类型<insert ,update,delete>
each row:操作第一行我都监控着
触发器创建语法四要素:
1.监视地点(table)
2.监视事件(insert/update/delete)
3.触发时间(after/before)
4.触发事件(insert/update/delete)
例子:
create table tb(id int,name vachar(10))
insert into tb(id,name)values(1,"aa")//
insert into tb(id,name)values(2,"aa")//
create trigger funn after insert on tb for each row set NEW.id=3
#注意,触发器不能对同一个张表使用
1. 非常遗憾,MYSQL中触发器中不能对本表进行 insert ,update ,delete操作,以免递归循环触发
2. 对于update 只能用set进行操作,insert与delete只能借助第二张表才能实现需要的目的
#查看和删除触发器
show create trigger fun G #查看单个触发器
show create triggers G #查看所有的触发器
drop trigger fun #删除触发器
以上是关于MySQL-存储过程与触发器的主要内容,如果未能解决你的问题,请参考以下文章