一、存储过程
存储在数据库服务器上的一段程序代码,可以反复调用
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() --创建存储过程p5begin --存储过程语句开始select * from employees; --存储过程语句end --存储过程语句结束// --结束存储过程创建delimiter ; --修改sql语句结束符
3. 调用存储过程
call p5() --调用存储过程
4. 查看存储过程
--\\G 格式化显示存储过程show procedure status\\Gshow procedure status where db=\'db1\'\\Gshow 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()begindeclare v1 int default 123;select v1;end//delimiter;
三、触发器
在添加、修改、删除数据时,触发一段代码执行
DDL DATABASE define language
DML machine
DQL query
六个触发时间(一个表最多6个触发器):
before insertbefore updatebefore deleteafter insertafter updateafter delete
两个隐含对象: new、old
new : 新数据行old : 旧数据行
insertnew: 新插入的数据行old: 没有updatenew: 修改之后的数据old: 修改之前的数据deletenew: 没有old: 被删除的数据
触发器测试
在数据库中创建一个触发器,该触发器能实现以下功能:在对employees表做更新操作时能把该条数据的updated字段的值自动更新成系统当前时间
create trigger trigger1before update on employees for each rowbeginset new.updated=now();end;//delimiter ;
update employees set age=18 where name=\'周杰伦\';
call p5();