mysql视图与存储过程详解

1.视图

1.视图是从一张或几张表导出的虚拟表。作用是方便用户对数据的操作。

2.数据库中并能没有存放视图的数据,这些数据存放在原来的表中。在使用视图查询数据时,数据库从原来的表中取出对应的数据。所以,视图中的数据依赖于原来表中的数据。表中的数据改变时,视图中的数据也会更新,反之,视图中的数据改变时,表中的数据也会更新。

3.视图操作:(只能查询)

3.1创建视图(需要CREATE VIEW权限)

create view view_student as select sid,sname,ssex from student #视图用到的查询结果

3.2修改视图

create or replace view view_student(v_id,v_name,v_classid) as select sid,sname,ssex from student

3.3删除视图

drop view if exists view_student

4.视图的作用:简化查询、避免频繁访问数据库、过滤数据(可以隐藏某些字段,增加数据安全性)、提高表的逻辑独立性(可以屏蔽原有表结果带来的影响,例如增加或删除未被视图引用的列,对视图不会造成影响;同样,如果修改表中的某些列,可以使用视图来解决修改这些列带来的影响)

2.存储过程

1.存储过程是一组为了完成特定功能的sql语句集,在数据库中经过第一次编译之后,再次调用不需要重复编译,用户通过指定的存储过程名字和参数执行存储过程。(PS:类似于函数)

2.

2.1创建存储过程(无参)

delimiter $$    -- 修改定界符
create procedure proc_showstudet()  -- 创建存储过程
BEGIN 
    select sid,sname,ssex,birthday,classid from student;
END $$  -- 结束
delimiter ;   -- 恢复默认定界符

2.2调用存储过程:

call proc_showstudet(); -- 调用无参存储过程

3.创建存储过程(带参)

3.1创建存储过程

delimiter $$
create procedure proc_canshu(
    in x int,  -- 只入参
    out y int, -- 只出参
    inout z int -- 入参以及出参
)
begin 
    set x=x+1; -- set关键字对变量进行操作
    set y=y+1;
    set z=z+1;

end $$
delimiter ;

3.2调用存储过程

set @a=10; -- 存储过程外部使用set关键字+@定义变量
set @b=20;
set @c=30;

call proc_canshu(@a,@b,@c); -- 调用有参存储过程

select @a,@b,@c; -- a=10   b=null  c=31
vc/

4.存储过程与函数的区别

语法不同:函数是function 存储过程时procedure

执行不同:函数必须依赖表达式的调用,存储过程可独立执行

返回值不同:函数只能返回一个结果,存储过程可以返回多个

功能不同:函数不易做复杂业务逻辑,但存储过程可以

5.面试题

写一个分页操作的存储过程

delimiter $$
create procedure proc_fenye_prac(
    in curpage int,
    in pagesum int,
    out contentsum int,
    out pagecount int
)
BEGIN
    declare x int;   -- 存储过程中使用declare关键字声明变量
    declare y int;
    set x=(curpage-1)*pagesum;
    set y=pagesum;
    
    select count(*) from student into contentsum;
    set pagecount=contentsum/pagesum;

    select * from student limit y offset x;

END $$
delimiter ;
-- 调用
call proc_fenye_prac(1,3,@contentsum,@pagecount);  -- 对存储过程中只出参的参数在调用时要进行接收
select @contentsum,@pagecount ;                   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值