欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库(视图、触发器、存储过程)

程序员文章站 2022-03-03 20:56:55
...

视图

视图的概念
  视图是一个虚拟表,是从数据库中一个或者多个表中导出来的表,视图还可以从已存在的的视图的基础上定义
  视图在MySQL中拥有和实体表一致的地位,所以在使用上就和正常的数据表一致
 
视图的使用
创建视图
  create view view_name as select…
  view_name 视图名称 select…语句是你所要在 这个视图中展示的字段
查看视图
  show tables; 该操作与表一致
删除视图
  drop view view_name;与表操作一致
更新视图
  更新视图指的是更新视图中数据的字段值
  insert into插入一个数据
  update 更新一个数据
  delete 删除一个数据

create view myview as # 创建视图
#将c_name字段在视图中展示为商品名称字段
select c_name as 商品名称,c_inprice as 商品进价,ct_id as 商品类型
#ct_id为commoditytype表的字段 这边使用内连接  
from commodity,commoditytype where ct_id=c_type;
 
#插入一条数据,虽然插入的是在视图中,但是在实体表中真实插入了数据
insert into  myview values(...)
注意:视图的插入操作只能是针对单表的完全映射才能插入数据
 
#修改一条视图数据
update myview set 商品进价=100 where 商品名称='手办';
注意:视图的修改会直接影响实体表的数据
 
#删除一条视图数据  删除商品名称为手办的商品数据
delete from view where 商品名称='手办';
注意:视图的删除会直接删除实体表的数据

视图的优点
  使用视图可以使得数据更加的安全
  对信息进行保护,和对复杂的SQL语句进行封装

触发器

触发器的概念
  即当发生某一事件时,如果满足给定条件,则执行相应的捆绑事件
 
触发器的使用
create trigger 触发器名称
after|before insert on tableName(表名)   # after和before是指 在tableName插入数据(之前|之后)触发绑定的事件
for each row  #监视每一行的数据
begin    #代表绑定事件的开始
 绑定的触发事件
end;    #代表绑定事件的开始
 
触发器的new 和 old
 insert语句中 只有 new 可用
 delete语句中 只有 old 可用
 update 语句中 new old 都可以使用

#修改SQL语句结束的默认结束符为$,因为绑定事件的结束符为;不修改则不能完成触发器的编写
delimiter $
create trigger mytri  #创建mytri插入触发器
after insert on `order`  #在order表被插入数据时 执行绑定事件
for each row
begin
#绑定的事件为 更新commodity表中c_num的值
update commodity set c_num = c_num-new.o_num where c_id=new.o_cid;
###此处的new可以引用insert的order表中的所有字段
end$
delimiter ;  #写完触发器别忘记把默认的结束符改回来
 
创建删除触发器
delimiter $
create trigger mytri2
after delete on `order`   #监视order表,若出现删除操作,则触发绑定的事件
for each row
begin
update commodity set c_num=c_num+old.o_num where c_id=old.o_cid;
##此处的old为 delete时 可以引用order表的所有字段
end$
delimiter ;
 
创建修改触发器
delimeter $
create trigger mytri3
after update on `order`  #监视order表,当order出现update操作时,触发事件生效
for each row
begin
##更新commodity中c_num的值
update commodity set c_num=c_num+old.o_num-new.o_num where c_id=new.o_cid;
end$
delimiter ;

触发器的作用
   存储SQL语句,可以减少代码的复写量

存储过程

存储过程的概念
  将一系列的SQL语句操作封装起来,使用时方便调用,类似于方法的调用
 
存储过程的使用
创建存储过程
create procedure 名称(参数列表)
begin
sql语句…(方法体)
end;
 参数有传入参数和返回参数,分别用 in和out修饰,当然参数列表也可以为空
删除存储过程
drop procedure 名称
 
调用存储过程
call 存储过程名称

传出参数的存储过程创建
delimiter $  #修改默认结束符
create procedure mypro(in cnum int(11))  #in表示该参数是传入的,int(11) 是该参数的类型
begin
select c_name from commodity where c_num=cnum;  
#筛选出c_num等于cnum的数据的c_name
end$
delimiter ;
call mypro(100);  #调用存储过程  这边参数给了100,就是筛选出c_num=100的数据
 
传出参数的存储过程创建
delimiter $  #修改默认结束符
create procedure mypro1(out cid int(11))
begin
select c_id into cid from commodity where c_num=10;
 #筛选出c_num为10的数据的id,并赋值给传出参数 cid   (这里使用into进行赋值操作)
end;
delimiter ;  #将默认结束符修改回;
call mypro1(); #调用mypro1存储过程,由于没有传入参数,,所以不需要参数
  
 
删除存储过程
drop procedure mypro1;

存储过程的作用
1.存储过程的SQL语句是已经编译过得,执行效率更高
2.存储过程可以有传入参数和传出参数(返回值) 可以直观的知道SQL语句有没有运行成功
3.存储过程比较稳定,不会有太大的错误