mysql merge 视图_mysql之视图

#概念数据库视图是虚拟表或逻辑表;

因为数据库视图与数据库表类似,它由行和列组成,因此可以根据数据库表查询数据;

允许通过先决条件的数据库视图来更新基础表中的数据;

当基础表的数据发生变化时,视图也反映了这些数据的变化;

#优点

简化查询:使用数据库视图可隐藏最终用户和程序基础表的复杂性;只需要简单的sql语句就能拿到想要的结果;

权限控制:可以限制用户对数据的访问权限,不暴露敏感数据;创建只读视图用户只能看不能改;

计算列:可创建实时统计字段

向后兼容:从新设计数据库基础表,不需要修改应用程序,只需要修改视图即可

#缺点

性能低:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。

高耦合:与基础表高耦合,如果更改了表结构同时需要更改视图

#视图的限制:

不能在视图上创建索引,查询的时候会使用mysql底层表的索引。

MySQL 5.7.7之前,不能在SELECT语句的FROM子句中使用子查询来定义视图。

删除或重命名视图所基于的表,MySQL会使视图无效,可以使用CHECK TABLE语句来检查视图是否有效。

简单的视图可以更新表中数据,基于具有连接,子查询等的复杂SELECT语句创建的视图无法更新。

MySQL是不支持物理视图

#创建视图

MySQL提供了三种算法:MERGE,TEMPTABLE和UNDEFINED,默认是UNDEFINED;

UNDEFINED算法使MySQL可以选择使用MERGE或TEMPTABLE算法。

MySQL优先使用MERGE算法进行TEMPTABLE算法,因为MERGE算法效率更高。

TEMPTABLE算法创建的视图将不能更新CREATE OR REPLACE ALGORITHM = UNDEFINED VIEW showTestTable AS

SELECT * FROM test LIMIT 2;

#基于另一个视图创建视图CREATE OR REPLACE VIEW showTest AS

SELECT * FROM showTestTable WHERE id=1;

#创建一个数据一致性的视图

WITH CHECK OPTION子句创建的视图在插入、更新、删除的时候会检查数据是否符合视图的定义,不符合的将拒绝执行CREATE OR REPLACE VIEW showTestTable4 AS

SELECT * FROM test WHERE id<10

WITH CHECK OPTION;

#查询视图SELECT * FROM showTestTable2;

#通过视图修改数据UPDATE showTestTable3 SET created=2 WHERE id=1;

#通过视图删除数据DELETE FROM showTestTable2 WHERE id=1;

#通过视图插入数据

使用了WITH CHECK OPTION语句的视图,不满足视图数据一致性的数据无法插入INSERT INTO showTestTable4 VALUES(10,11111);

#查询可以update的视图SELECT table_name, is_updatable FROM information_schema.views WHERE table_schema = 'demo';

#查看所有的表,视图属于表SHOW TABLES;

#查看哪些是表,哪些是视图SHOW FULL TABLES;

#查看视图的定义SHOW CREATE VIEW showTestTable;

#修改视图ALTER VIEW showTestTable4 AS

SELECT * FROM test WHERE id=8;

SELECT * from showTestTable4;

#删除视图DROP VIEW IF EXISTS showTestTable;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值