MySQL视图
2015-08-13 16:18
295 查看
create table teacher( id int primary key auto_increment, name varchar(10), salary decimal(10,2) ); insert into teacher values(null,'李国冬',100.11); insert into teacher values(null,'周杰伦',132.41); insert into teacher values(null,'邓丽君',156.16);
创建视图
create view view_name as select statement;
create view view_teacher as select id,name from teacher;
视图就是存在于数据库中的虚拟表。
insert into view_teacher values(null,'范冰冰');
select * from (select id,name from teacher) as temp;
视图本身没有数据,只是通过执行相应的select语句完成获得相应的数据。
insert into teacher values(null,'宁泽涛','324.32');
视图管理
删除视图
drop view [if exists] view_name;
drop view view_teacher;
修改视图
alter view view_name as select_statement;
alter view view_teacher as select id,name,salary from teacher;
alter view view_teacher(v1,v2,v3)as select id,name,salary from teacher;
缩减业务逻辑
通过视图可以将复杂的业务逻辑简单的完成,先使用视图完成一定的逻辑,在视图的基础上完成另外的逻辑。通常,视图完成的逻辑都是相对来说比较基础的逻辑。
select * from one as v1 left join two as v2 on v1.one_id=v2.two_id; create view one_two as select one_id,two_id from one as v1 left join two as v2 on v1.one_id=v2.two_id; select * from one_two;
视图的执行流程
指的是一个视图是在什么时候执行,依据哪些方法执行。视图存在两种执行算法:
1、merge
2、temptable
merge:合并的执行方式。每当执行的时候,先将视图的sql语句与外部查询视图的sql语句混合在一起,最终执行。
temptable:临时表模式。每当查询的时候,将视图所使用的select语句生成一个结果的临时表,再在当前的临时表内进行查询。
当用户创建试图时,mysql默认使用一种undefined的处理算法。就是会自动在合并方式和临时表方式进行选择。
获得每个班级的总天数?
如果获得班级内,代课天数最多的信息?
select c_id ,max(day) from teacher_grade group by c_id order by day asc; create view view_days as select c_id ,max(day) from teacher_grade group by c_id order by day asc;
以下两种方式,使用与不使用视图的对比?
drop view view_days; create view view_days as select c_id ,max(day) as max_day from teacher_grade group by c_id order by day asc; select * from view_days group by max_day;
select * from (select c_id ,max(day) as max_day from teacher_grade group by c_id order by day asc)as temp group by max_day;
注意:
尽量使用视图完成读操作。
如果使用视图,则需要注意对视图的修改,也是对真实表的修改,会及时生效。
删除视图是不会销毁实体表内的数据的。
如果大家做的是外部接口。一个数据库多个应用,应该考虑针对每个应用采用不同的视图接口。
相关文章推荐
- MySQL Study之--MySQL innodb引擎表存储分析
- Mysql 分页
- mysql源码安装
- mysql忘记密码
- mysql引擎分析说明整理
- mysql数据库的连接
- MySQL数据备份
- MySQL中group_concat函数-和group by配合使用
- MySQL数据库迁移(直接复制文件)
- 配置MySQL主从复制(Replication)
- MySQL常见命令和操作一览
- mysql隔离级别
- MySQL的约束问题
- 有关hibernate入门小实例--hibernate+mysql
- 修改mysql数据库root用户的密码
- mysql 输出当前月所有日期与对应的星期
- mysql重置密码
- Win7设置MySQL自启动的方法
- mysql left join right join区别以及优化收集
- mysql参数之slave_skip_errors