本章主要为MySQL数据的:存储过程、视图、触发器。
关键字:procedure、call、view、trigger
1. 创建存储过程
create procedure 存储过程名称()
begin
内容;
end;
示例:
create procedure TestName()
begin
select * from student;
end;
2. 执行存储过程
call 存储过程名称;
3. 创建视图
create view 视图名称 as 内容;
4. 使用视图
select * from 视图名称;
-------------------------------------------------------触发器---------------------------------------------------------
1. before的用法(before:在......之前,先做什么操作)
create trigger 触发器名称
before insert on 表名 for each row
begin
if new.限定条件1
then set new.条件1;
end if;
if new.限定条件2;
then set new.条件2;
end if; end;
示例: create trigger TestTrigger
before insert on student for each row
begin
if new.age<0
then set new.age = 0;
end if;
if new.age>100;
then set new.age = 100;
end if; end;
当年龄小于0时,默认为0,当年龄大于100时,默认为100
2. after的用法(after:在......之后,然后做什么操作)
create trigger 触发器名称
after insert on 表名1 for each row
begin
insert into 表名2(字段1,字段2,......,字段n)
values (new.表名1.字段1,new.表名1.字段2,......new.表名1.字段n);
end;
示例: create trigger TestTrigger
after insert on student1 for each row
begin
insert into student2(Id2,Name2,Age2,Sex2)
values (new.Id1,new.Name1,new.Age1,new.Sex1);
end;
在 student1 中插入数据后,往 student2 中插入相同数据
3. 在删除表1之前,先删除表2
create trigger 触发器名称
before delete on 表1 for each row
begin
delete from 表2 where 条件;
end;
例: create trigger TestTrigger
before delete on student for each row
begin
delete from chengji where old.sid = csid;
end;
在删除 student 表内数据之前,先删除 chengji 表内数据(student为主表,chengji为从表,old.sid为主表主键,csid为从表外键)
4. 在更新表1数据之后,更新表2数据
create trigger 触发器名称
after update on 表1 for each row
begin
限定条件1 or 限定条件2
then
update 表2 set 新数据 where 条件;
end if;end;
例: create trigger TestTrigger
after update on student1 for each row
begin
if old.sname1 != new.sname1
then
update student2 set student2.sname2 = new.sname1
where old.sid1 = student2.sid2;
end if;end;
在更新 student1 表内数据之后,更新 student2 表内数据(student2.sname2 = new.sname1 为把student2中的sname2 更新为student1中新更改的sname1数据)
5. old 与 new 的区别
old:旧数据,在这个表内已经存在的数据
new:新数据,从这个表内添加的新数据,或更新的数据
6. 查看触发器
show triggers;
7. 删除触发器
drop trigger 触发器名称;
上一章:MySQL数据库篇4