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

相关推荐
LiRuiJie3 分钟前
深入剖析MySQL锁机制,多事务并发场景锁竞争
数据库·mysql
2501_9153743513 分钟前
Faiss向量数据库全面解析:从原理到实战
数据库·faiss
睡觉待开机19 分钟前
0. MySQL在Centos 7环境安装
数据库·mysql·centos
2501_9153743519 分钟前
Faiss vs Milvus 深度对比:向量数据库技术选型指南
数据库·milvus·faiss
一叶知秋哈1 小时前
Java应用Flink CDC监听MySQL数据变动内容输出到控制台
java·mysql·flink
傻啦嘿哟1 小时前
Python 数据分析与可视化实战:从数据清洗到图表呈现
大数据·数据库·人工智能
cookqq1 小时前
mongodb源码分析session异步接受asyncSourceMessage()客户端流变Message对象
数据库·sql·mongodb·nosql
呼拉拉呼拉2 小时前
Redis故障转移
数据库·redis·缓存·高可用架构
什么都想学的阿超2 小时前
【Redis系列 04】Redis高可用架构实战:主从复制与哨兵模式从零到生产
数据库·redis·架构
pp-周子晗(努力赶上课程进度版)2 小时前
【MySQL】视图、用户管理、MySQL使用C\C++连接
数据库·mysql