mysql存储过程和触发器

存储过程(procedure):
存储在数据库中的可以执行特定工作 ( 查询和更新 ) 的一组 SQL 代码的程序段
类似于 Java 的方法

优点:

存储过程只在创建时进行编译,以后每次执行都不需要编译,一般的sql每执行一次就编译一次,所以存储过程可以提高执行效率

对数据库进行复杂操作时,可以将发杂操作用存储过程封装起来和数据库提供的事物结合一起使用
存储过程可以重复使用,减少开发量
安全性高,可以指定只有某用户才可以使用
---------

create procedure procedure_name()//可以为无参数,也可以有 输入参数in, 还有输出参数out  如 in id int

begin

#语句

end;

如 从stu表根据sid查询名字sname id为偶数时查名字 否则查性别 sex

create procedure queryName(in id int,out varchar(50) name)

begin

if(id%2=0) then

select sname into name from stu where sid=id;

else

select sex into name from stu where sid=id;

end if;

end;

------------

执行存储过程要用关键字 CALL

set @name:='';

CALL queryName(105,@name);

select @name;

循环 while:

create procedure testa(IN mynumint)

BEGIN

  DECLAREi intDEFAULT 0;

  while(i< 10) DO

  BEGIN

  seti = i+1;

  INSERTINTO testa (myid,myname)values (i,'name');

  END;

  ENDWHILE;

END;

循环repeat

BEGIN

  DECLAREi int DEFAULT 100;

  REPEAT

  BEGIN

  seti = i+1;

  INSERTINTO testa (myid,myname)values (i,'admin');

  END;

  UNTILi > 110

  endREPEAT;

END;


-----------------------------------------

触发器:

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力

触发器作用:

1. 安全性 。可以基于数据库的值使用户具有操作数据库的某种 权利
2. 审计 。可以跟踪用户对数据库的 操作
3. 实现复杂的数据完整性 规则
4. 实现复杂的非标准的数据库相关完整性 规则
5. 同步实时地复制表中的 数据
6. 自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理

自动记录日志:

  CREATETRIGGER INSERT_STUDENT AFTER INSERT on t_student

FOR EACH ROW

BEGIN

INSERT INTO mylog (logid,stuname,action,mytime)

VALUES (NEW.sno,NEW.sname,'insert',NOW());

END;















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值