视图和存储过程和触发器
视图
视图是虚拟存在的表。视图中的数据并不真实存在,行和列数据来自自定义视图的查询中使用的表,并在使用视图时动态生成的。他只保存了sql逻辑。
其实就是实现存储了一个虚拟表而已,后面的查询可以继续使用此视图,会让查询更加方便。
创建视图
create [or replace] view view_name[(列名称)] AS select语句 [with [cascaded | local] check option ]列名称可以不写,那么就是select的结果
修改视图
本质是修改视图对应的select语句
语法和创建视图一致,但是这个必须有 or replace字段
检查选项
可以向视图中插入数据
insert into view_name values(value1, value2,...);检查选项(cascaded)
创建视图时的with check option,
如果使用了,mysql会通过视图检查正在更改的每一行,例如插入、更新、删除,以使其符合视图的定义。Mysql 允许基于另外一个视图创建视图,它还会检查依赖视图中的规则以保持一致性,而这是一个可选项,默认为cascaded,可选的为local。
如果不使用,则不会检查本次的。
那么cascaded和local的区别是:
对于前者,如果在当前视图中使用了,那么对于其所依赖的视图,即便没有使用with check option,那么也会被检查,且递归式检查每一个,即它依赖的视图所依赖的视图也会如此
对于后者,它只对当前视图进行检查,对于其所依赖的视图,如果使用了with check option,则会检查,如果没有使用,则不会检查
如果一个cascaded的视图,依赖了一个local视图?
视图的更新
要使视图可以更新,视图中的行必须对应于基础表的一行数据,即1对1,否则无法更新。比如视图是对基础表的聚合。
视图的作用
简化操作,复杂操作定义为视图,后续操作会很方便。
可以对视图进行权限控制,让用户只能看到某些列
可以屏蔽基础表的结构的变化对业务的改变
存储过程
存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输
存储过程思想上很简单,就是数据库SQL语言层面的代码封装,在执行时,只需要调用这个过程即可。
既然是封装,也可以进行传递参数,返回数据
触发器
触发器是与表有关的数据对象,指在insert/update/delete之前or之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别名old和new来引用触发器中发生变化的记录内容,这与其他数据库相似。现在触发器还只支持行级触发,不支持语句级触发。
语法
创建
查看
删除
最后更新于
这有帮助吗?