一,视图,存储过程
视图,优点
- 简化数据查询语句
- 使用用户能从多角度看到同一数据
- 提高了数据的安全性
- 提供了一定程度的逻辑独立性
- 减少带宽流量,优化后还可以提高执行效率
示例:
查询出管理部中目前薪资比生产制造部员工最高工资还要高的员工信息
select 姓名,目前薪资,部门 from view_生产制造部 where 目前薪资>(select avg(目前薪资) from view_生产制造部)
创建视图
create view view_customer_order_info
as
select a.客户编号,a.公司名称,a.联系人,a.地址,b.订单号码,b.订单日期,b.收货人,
d.产品,e.类别名称,f.供应商,c.单价,c.数量,c.折扣 from 客户 a,订货主档 b,订货明细 c ,产品资料 d,产品类别 e ,商品供应 f where a.客户编号=b.客户编号 and b.订单号码=c.订单号码 and c.产品编号=d.产品编号 and d.类别编号=e.类别编号 and d.供应商编号=f.供应商编号
and 订单日期 between '1997-7-1' and '1997-7-31'
查看视图
select * from view_customer_order_info
修改视图
alter view view_customer_order_info
as
select a.客户编号,a.公司名称,a.联系人,a.地址,b.订单号码,b.订单日期,b.收货人,
d.产品,e.类别名称,f.供应商,c.单价,c.数量,c.折扣 from 客户 a,订货主档 b,订货明细 c ,产品资料 d,产品类别 e ,商品供应 f where a.客户编号=b.客户编号 and b.订单号码=c.订单号码 and c.产品编号=d.产品编号 and d.类别编号=e.类别编号 and d.供应商编号=f.供应商编号
订单日期是八月的
select * from view_customer_order_info where MONTH(订单日期)=8
create view view_emprioyee
as
select 员工编号,姓名,year(curdate())-year(出生日期) as 年龄,if(性别=-1,'女','男') as 性别,if(婚姻状况=-1,'否','是') as 是否已婚 from 工龄
select * from view_emprioyee where 是否已婚='是' and 年龄>40 and
查看视图
desc view_emploveee
show table status like 'view_employee'
show create view view_employee
修改视图
alter view
删除视图
drop view view_employee
二,存储过程
其实存储过程很简单,无非就是按照其特定的语法,创建存储过程,然后在执行程序的时候,调用就行了。
怎么调用呢?下面是一个创建存储过程的实例
CREATE PROCEDURE myproc() BEGIN SELECT COUNT(*) FROM test; END
在mysql数据库中函数一栏,可以看到存储过程函数
然后把原本写的sql语句的地方直接换成CALL myproc,就可以执行了,跟执行SELECT COUNT(*) FROM test;是一样的结果
储存过程就是把sql语句放在数据库创建,然后直接编译,然后程序就可以重复直接调用了。
- 存储过程在创建的时候直接编译,而sql语句每次使用都要编译,提高执行效率
- 一个存储过程可以被重复使用。(其实sql语句也可以,没什么卵用)
- 一条sql语句,可能需要访问几张表,对数据库连接好几次,存储过程只会连接一次
- 存储的程序是安全的。数据库管理员可以向访问数据库中存储过程的应用程序授予适当的权限,而不向基础数据库表提供任何权限。(大概这就是存储过程存在的原因吧)
示例:
1,通过下面语句可以看到该数据库下所有的存储过程名称
show procedure status
也可以在数据库的函数一栏看到存储过程
2,查看存储过程详细
show create procedure dada
dada是存储过程函数名称
3,一个简单的存储过程实例/
create procedure proc_生产制程部()
begin
select * from 工龄 where 部门='生产制造部';
end
call proc_生产制造部()
4,如何给存储过程定义参数
定义一个参数
create PROCEDURE p2( in num int)
begin
declare num02 int;
declare num03 int;
set num02=10;
set num03=num+num02;
select num03;
end
call p2(20)
定义两个参数
create PROCEDURE p3( in a int,in b int)
begin
declare result int;
set result=a+b;
select result;
end
call p3(1,2)
5 ,简单的条件控制语句
create procedure p4(in x int)
begin
if x=1 then
select 1;
elseif x=2 then
select 2;
else
select 3;
end if;
end;
call p4(3)
6, 带有输出类型的参数
create procedure p8(in a int,in b int,out c int)
begin
set c=a+b;
select c as result;
end
call p8(1,2,@result)