mysql数据库存储过程和触发器

一、存储过程

存储在数据库服务器上的一段程序代码,可以反复调用

1. 创建测试表

create table employees(
id int primary key auto_increment,
name varchar(20),
age int,
updated datetime,
created datetime
)engine=innodb charset=utf8;

insert into employees values(null,'周杰伦',38,now(),now());
insert into employees values(null,'王凯',36,now(),now());
insert into employees values(null,'吴秀波',40,now(),now());

2. 创建存储过程

delimiter //		--修改sql语句结束符
drop procedure if exists p5 //	--删除存储过程 p5 如果存在的话
create procedure p5()	--创建存储过程p5
begin		--存储过程语句开始
select * from employees;	--存储过程语句
end		--存储过程语句结束
//	--结束存储过程创建
delimiter ;	--修改sql语句结束符

3. 调用存储过程

call p5()		--调用存储过程

4. 查看存储过程

--\G 格式化显示存储过程
show procedure status\G 
show procedure status where db='db1'\G 
show procedure status where name='p5'\G

5. 删除存储过程

drop procedure p5;

二、局部变量

只在所在的局部代码块内使用
声明: declare v1 int;
declare v2 int default 888;
赋值: set v1=666;
取值:select v2;

1. 创建局部变量测试

delimiter //
drop procedure if exists p6 //
create procedure p6()
begin
declare v1 int default 123;
select v1;
end
//
delimiter;

三、触发器

在添加、修改、删除数据时,触发一段代码执行
DDL DATABASE define language
DML machine
DQL query
六个触发时间(一个表最多6个触发器):

before insert
before update
before delete

after insert
after update
after delete

两个隐含对象: new、old

new : 新数据行
old : 旧数据行
insert
new: 新插入的数据行
old: 没有

update
new: 修改之后的数据
old: 修改之前的数据

delete
new: 没有
old: 被删除的数据

触发器测试

在数据库中创建一个触发器,该触发器能实现以下功能:在对employees表做更新操作时能把该条数据的updated字段的值自动更新成系统当前时间

create trigger trigger1
before update on employees for each row
begin
set new.updated=now();
end;
//
delimiter ;
update employees set age=18 where name='周杰伦';
call p5();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值