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

相关推荐
是小崔啊5 小时前
事务03之MVCC机制
数据库·mysql·事务·
LUCIAZZZ9 小时前
简单的SQL语句的快速复习
java·数据库·sql
Elastic 中国社区官方博客11 小时前
使用真实 Elasticsearch 进行高级集成测试
大数据·数据库·elasticsearch·搜索引擎·全文检索·jenkins·集成测试
@_@哆啦A梦11 小时前
Redis 基础命令
java·数据库·redis
fajianchen11 小时前
MySQL 索引存储结构
数据库·mysql
想做富婆11 小时前
oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]
数据库·oracle·联合查询
xianwu54313 小时前
反向代理模块jmh
开发语言·网络·数据库·c++·mysql
Leven19952713 小时前
Flink (十三) :Table API 与 DataStream API 的转换 (一)
数据库·sql·flink
geovindu13 小时前
neo4j-community-5.26.0 create new database
数据库·mysql·neo4j
MyY_DO14 小时前
maven mysql jdk nvm node npm 环境安装
java·mysql·maven