视图/存储过程(函数)/触发器
视图:由表动态生成,虚拟的表,保存的是sql的逻辑。
创建视图:
create [or replace] view viewName【列名列表】 as select 语句 [with [cascaded|local] check option]
修改视图:
1、【or replace】必须存在。
2、alter view viewName as .....
删除视图:
drop view 【if exists】 viewName;
with [cascade|local] check option
操作视图:
1、添加数据。
【insert into view1 values(.....)】数据添加到了基表中。
例如,视图是id < 30的进去视图。但是通过视图添加id为40的数据,数据添加成功,但是视图查询不到。因为id<30。
解决: with cascaded check option;增加关联。
通过视图1创建视图2,如果添加了限制条件,两个视图都要检查。给依赖的视图也添加了限制条件。
2、 with local check option :
当前的视图限制,递归查找之前的。但是限制不进行传递操作,依赖的视图有限制就有,没有限制就没有。
3、视图更新条件:
视图更新必须与基础表存在行记录1:1的关系。
例如:sum min max count distinct group by、having、union、union all
视图作用:
1、简化操作,直接查询视图就行
2、安全。【数据库可以进行用户授权,但是不能授权到特定行和特定列上。通过视图,用户只能查询和修改他们能见到的数据】
3、数据独立。视图可以帮助用户屏蔽真实表结构变化带来的影响。
存储过程
特点:
1、封装、复用
2、可以接收参数,也可以返回数据
3、减少网络交互,效率提升
创建
create procedure name(args)
begin
--sql
end;
create procedure p1() begin select count(*) from students; end;
调用
call procedure_name(args);
查看存储过程
select * from infomation_schema.routines where routine_schema = 'xxx'; --查询指定数据库的存储过程及状态信息 show create procedure p1;--查询某个存储过程的定义
删除存储过程
drop procedure [if exists] p1;
语法结构
变量
1、系统变量:是MySQL服务器提供,不是由用户定义的,属于服务器层面。分为全局变量Global、会话变量Session。
查看系统变量:
show [session|global] variables [like '_ _ _']; select @@[session|global] 系统变量名
设置系统变量
set [session|global] 系统变量名=值; set @@[session|global].系统变量名 = 值;
虽然设置的是全局的,但是服务器重启后,又会初始化为默认值。
2、用户自定义变量
是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用@变量名使用就行,其作用域为当前连接。
赋值操作
--赋值操 set @var_name = xxxx set @var_name := xxxx select @var_name:= xxx