Mysql 存储程序

存储程序包括:存储函数,存储过程,触发器,事件

存储程序可以使用局部变量,条件语句,循环和嵌套语句块等多种语法构造,符合语句使用begin开头,end结尾

符合语句块里的语句必须以分号(;)彼此隔开,由于mysql程序默认使用(";")来充当语句分隔符,所以需要使用delimiter $ 暂时将分隔符

设置成$符,等结束后再修改回来,例如:

delimiter $ 

create procedure show_times()

begin select current_timestamp; 

   select utc_timestamp;

end$

delimiter;

执行操作:Call show_times();

存储过程使用Call语句调用,是一个独立的操作,不能用在表达式中,实现某种效果无须返回值,运算会返回多个结果集(函数做不到)

因为过程支持的参数类型允许他们的值在过程执行期间被设置,而调用者可以在过程返回后去访问那些值

函数创建:

delimiter $

create function count_born_in_year(p_year int)

return int

reads sql data

begin 

return (select count(*) from president where year(birth) = p_year);

end;

delimiter;

函数需要包含return语句,调用方式:select count_born_in_year(1908); 存储函数可以出现在任意复杂的表达式里

过程中可以使用函数, 存储函数中调用存储过程将是不被允许的。

需要创建函数和过程,就需要有create routine权限

如果log_bin_trust_function_creators系统变量没有被激活,你就必须具备super权限才能创建存储函数,需要使用

DETERMINISTIC,NO SQL或READS SQL DATA之一来定义存储函数

1 DETERMINISTIC不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句 

存储过程的参数类型:In 传入, out 传出, inout传入传出

存储函数的参数都像in参数只能传入

触发器和事件根本没有任何参数,触发器是在插入或更新或删除的时候自动触发执行的语句

触发器要用create trigger语句创建,在触发器的定义里需要表明他将由那种语句触发(INSERT,UPDATE,DELETE)触发,

是修改前还是修改后触发,语句如下:create trigger trigger_name (BEFORE | AFTER) (INSERT| UPDATE|DELETE) on tal_name for each row trigger_stmt;

trigger_stmt是触发器的语句体部分,也就是触发器被触发时将要执行的语句,

create trigger bl_t before insert on t

for each row begin 

set NEW.dt = CURRENT_TIMESTAMP ;

IF NEW.percent < 0 THEN

SET NEW.percent = 0;

ELSEIF NEW.percent > 100 THEN

SET NEW.percent = 100;

end if;

END$

delimiter;

事件,想要使用事件,就必须把下面的语句添加到配置文件中(my.conf)

[mysqld]

event_scheduler = ON

例子:如果不想让老数据行越积越多,就创建一个事件来定期清理他们,若要让这个事件每隔4小时执行一次,就把超过一天

的数据行清除掉,语句:

CREATE EVENT expire_web_session ON SCHEDULE EVENY 4 HOUR 

DO

DELETE FROM web_session WHERE last_visit < CURRENT_TIMESTAMP - INTERVAL 1 DAY;

定期执行的时间间隔 EVENY 4 HOUR

DO 语句负责定义事件的语句体部分,也就是触发时执行的SQL语句,

如果将EVERY 4 HOUR替换为 AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR

表示创建一个只执行一次的事件,在一个小时后执行

事件的激活和禁用操作:

ALTER EVENT event_name DISABLE; 不可用

ALTER EVENT event_name ENABLE; 可用



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值