[Mysql-视图和存储过程]

视图

视图是从一个或者几个基本表(或视图)导出的表。它与基 本表不同,是一个虚表。

创建使用视图

视图

-- 视图只能用来查询,不能做增删改

-- 创建视图

-- 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,团队中对于存储过程的使用大多是依赖文档。

相关推荐
懵逼的小黑子1 小时前
解释两个 Django 命令 makemigrations和migrate
数据库·django
Lxinccode3 小时前
Java查询数据库表信息导出Word-获取数据库实现[1]:KingbaseES
java·数据库·word·获取数据库信息·获取kingbasees信息
豆沙沙包?4 小时前
5.学习笔记-SpringMVC(P61-P70)
数据库·笔记·学习
朴拙数科6 小时前
MongoDB Atlas与MongoDB连接MCP服务器的区别解析
服务器·数据库·mongodb
柏油6 小时前
MySQL InnoDB 行锁
数据库·后端·mysql
A-Kamen6 小时前
MySQL 存储引擎对比:InnoDB vs MyISAM vs Memory
数据库·mysql·spark
极限实验室7 小时前
【Workshop 第一期 - 北京站】搜索服务统一治理(跨引擎多个集群监控管理、流量管控、服务编排)
数据库
鹏翼丶7 小时前
搭建动态SQL取数
数据库·sql·动态sql
辰哥单片机设计7 小时前
PH传感器详解(STM32)
数据库·mongodb
JavaAlpha7 小时前
面试题:Redis 一次性获取大量Key的风险及优化方案
数据库·redis·bootstrap