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

相关推荐
时差95325 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式27 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
秋意钟1 小时前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102162 小时前
python下载pdf
数据库·python·pdf
ac-er88882 小时前
MySQL如何实现PHP输入安全
mysql·安全·php
桀桀桀桀桀桀2 小时前
数据库中的用户管理和权限管理
数据库·mysql
superman超哥3 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452003 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina4 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina4 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j