AI智能
改变未来

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()	--创建存储过程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();
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » mysql数据库存储过程和触发器