一、存储过程
存储在数据库服务器上的一段程序代码,可以反复调用
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();