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

视图

视图的概念
  视图是一个虚拟表,是从数据库中一个或者多个表中导出来的表,视图还可以从已存在的的视图的基础上定义
  视图在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.存储过程比较稳定,不会有太大的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值