MySQL视图、存储过程、 变量、 函数、事务
1.视图
含义:虚拟表,但是和普通表的一样使用
MySQL5.1之后出现特性,是通过动态生产的数据
语法:
create view 视图名称
as
查询语句
创建语法 是否实际占用物理空间 使用
表 create table 保持了数据 增删改查
视图 create view 只保存了SQL逻辑 主要是查(可以修改数据,不能添加数据,不能删除数据)
删除视图
语法:drop view 视图名
drop view v2;
修改视图的内容:
方式1:
create or replace view 视图名
as
查询语句
方式2:
alter view 视图名
as
查询语句
查询表结构
desc employess;
查询视图结构
desc v1;
注意:
试图不允许更新的情况
包含分组函数、group by、having、去重
2.存储过程
存储过程
类似于Java中方法
含义:一组预先变化的SQL语句集合,理解成批处理语句
好处:
1、提高SQL复用性
2、简化操作
3、减少了编译次数并且减少和数据库服务器的连接次数,提高了效率
创建语法:
create procedure 存储过程名([参数列表])
begin
存储过程体(一组SQL语句)
end
用[ ]表示可以不写
注意:
1. 参数列表:参数模型 参数名 参数类型
参数模型:
in:该参数可以作为输入,也就是该参数在调用 存储过程时需要穿入
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入或输出,也就是该参数需要传入,又可以返回
2. 如果存储过程中仅仅只有一句语句,begin和end可以省略不写
3. 存储过程体中每条SQL语句结尾要求都要加上分号
delimiter 重新设置(结束标记)
案例:求两个数的和(两个int --> in 一个out类型参数)
create procedure pro1_sum(in a int,in b int,out c int)
begin
-- c是输出结果 set:给变量赋值
set c = a + b;
end;
存储过程的使用
调用存储过程:
call 存储过程名();
调用带参数的存储过程:
call 存储过程名(参数);
注意:
如果参数中in类型,参数可以是数值,可以是变量
对于out或inout类型,参数必须是变量
MySQL中的变量必须以@开头
例如:call pro_sum(@变量名,@变量名)
案例:
@result 就是一个变量,用来接收存储过程中返回值
call pro1_sum(10,20,@result);
selecct @result;
call pro1_sum(@a,@b,@c);
select @c;
删除存储过程
drop procedure pro1_sum;
案例:查询员工表的平均工资
无in 无out
create procedure pro2_avg()
begin
select round(avg(salary),2) as '平均工资' from employees;
end;
#调用存储过程
call pro2_avg();
案例:传递一个员工编号,输出这个员工信息
有in 无out
create procedure pro3(in empId int)
begin
select * from employees where employee_id = empId;
end;
#调用存储过程
call pro3(123);
#删除存储过程
drop procedure pro3;
案例:查询出公司的总计工资
无in 有out
create procedure pro4(out totalMoney double)
begin
给变量赋值 set
select 值 into 变量名
select sum(salary) into totalMoney from employees;
end;
#调用存储过程
call pro4(@temp);