视图
视图是从一个或者几个基本表(或视图)导出的表。它与基 本表不同,是一个虚表。
创建使用视图
视图
-- 视图只能用来查询,不能做增删改
-- 创建视图
-- create view 视图名【view_xxx / v_xxx】
-- as 查询语句
create view v_stu_man as
select * from student where ssex = '男';
-- 视图使用
select * from v_stu_man;
create view v_vstuman_class as
select v_stu_man.*,classname from v_stu_man
left join class on v_stu_man.classid = class.classid
select * from v_vstuman_class;
-- 查看库中所有的视图
select * from information_schema.VIEWS
WHERE table_schema = 'myschool';
-- 删除视图
drop view v_stu_man;
存储过程
存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数)来执行它。
创建使用存储过程
存储过程 -- 本质是一个函数
-- 存储过程创建
-- create procedure 存储过程名【proc_xxx】(形参列表)
-- begin
-- 一组sql语句集
-- end
-- 创建最简单存储过程
delimiter $$
create procedure proc_test()
begin
select * from student;
end $$
delimiter ;
-- 使用存储过程
call proc_test();
-- 带参存储过程
delimiter $$
create procedure proc_test2(
in a int, -- in 只入参(值传递)
out b int, -- out 只出参 (无)
inout c int -- inout 出入参 (引用传递)
)
begin
set a = a+1;
set b = b+100;
set c = c+1000;
end $$
delimiter ;
-- 环境变量 @局部环境变量 @@全局环境变量
-- 环境变量 @ 局部环境变量 @@ 全局环境变量
set @x = 10; -- 11 10 null
set @y = 20; -- 120 20 null
set @z = 30; -- 1030 30 null
select @x, @y, @z;
call proc_test2(@x,@y,@z)
select @x, @y, @z;
-- 面试题-- ceiling 向上取整
-- 分页
delimiter $$
create procedure proc_stuPage(
in curpage int,
in sizepage int,
out stucount int,
out pagecount int
)
begin
declare cp int; -- declare 变量
set cp = (curpage-1)*sizepage;
select count(*) from student into stucount;
set pagecount = ceiling(stucount / sizepage);
select * from student limit cp,sizepage;
end $$
delimiter ;
set @a = 0;
set @b = 0;
call proc_stuPage(2,3,@a,@b);
select @a,@b
存储过程与函数的区别:
语法:关键字不同,存储过程是procedure, 函数是function;
执行:存储过程可以独立执行,函数必须依 赖表达式的调用;
返回值:存储过程可以定义多个返回结果, 函数只有一个返回值;2222
功能:函数不易做复杂的业务逻辑,但是存 储过程可以。
存储过程的缺陷:
维护性:存储过程的维护成本高,修 改调试较为麻烦。
移植性:大多数关系型数据库的存储过程 存在细微差异。
协作性:没有相关的版本控制或者IDE,团队中对于存储过程的使用大多是依赖文档。