视图和存储过程和触发器

视图

视图是虚拟存在的表。视图中的数据并不真实存在,行和列数据来自自定义视图的查询中使用的表,并在使用视图时动态生成的。他只保存了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来引用触发器中发生变化的记录内容,这与其他数据库相似。现在触发器还只支持行级触发,不支持语句级触发。

语法

创建

查看

删除

最后更新于

这有帮助吗?