MySQL 视图

1 什么是视图

视图:存储的查询语句,当调用的时候,产生结果集,视图充当的是虚拟表的角色.

使用场景

权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如salary...

关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作;

注意事项:

修改视图时有些场景会修改原表数据,建议不要对视图数据进行变更操作

2 .视图相关操作

创建:

(1).第一类:create view v as select * from table;

(2).第二类:create view v as select id,name,age from table;

(3).第三类:create view v[vid,vname,vage] as select id,name,age from table;

如果涉及到数据量过大,业务逻辑需要跨表查询等等也可建立一个跨表的视图,有三种情况:

基于同一数据库

这种情况较为简单,只需简单的一行sql命令,如下:

create view v as (select * from table1) union all (select * from table2);

基于不同数据库

这种情况只比上面的sql语句多一个数据库的名字,如下:

create view 数据库1.v as (select * from 数据库1.table1) union all (select * from 数据库2.table2);

create view 数据库2.v as (select * from 数据库1.table1) union all (select * from 数据库2.table2);

如果执行第一个sql将在数据库1下建立视图,反之亦然;

基于不同服务器

这种情况稍微麻烦一点,需要先建立一个远程表来访问远程服务器的数据表,然后再对这个刚建立的远程表和本地表进行视图,步骤如下:

(1)、查看MySql是否支持federated引擎

    (1).登录Mysql;    

    (2).mysql>show engines;

    (3).如果显示为no,在配置文件中添加:federated (在my.ini),重新启动mysql服务。

(2)、创建远程表

     mysql>CREATE TABLE federated_table (

                   id  INT(20)  NOT NULL AUTO_INCREMENT,  

                  name  VARCHAR(32) NOT NULL DEFAULT '',  

                  other  INT(20) NOT NULL DEFAULT '0',   

                  PRIMARY KEY  (id)

                 )

                 ENGINE=FEDERATEDDEFAULT

                 CHARSET=utf8

                 CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

CONNECTION可以按如下方式进行配置:

      (1).CONNECTION='mysql://username:password@hostname:port/database/tablename'

      (2).CONNECTION='mysql://username@hostname/database/tablename'

      (3).CONNECTION='mysql://username:password@hostname/database/tablename'

(3)、建立视图

create view 本地数据库.v as (select * from 本地数据库.table1) union all (select * from 远程数据库.test_table);

查询:

查看当前库下所有的视图:

mysql> show full tables where table_type like 'VIEW';

查询视图详情:

查看视图的方法包括:DESCRIBE、SHOW TABLE STATUS、SHOW CREATE VIEW及查询information_schema数据库下的views表。

(1)mysql> DESC vproduct;

(2)mysql> SHOW TABLE STATUS LIKE 'vproduct';

(3)mysql> SHOW CREATE VIEW vproduct\G

(4)mysql> SELECT * FROM information_schema.views WHERE TABLE_NAME='vproduct'\G

后两种都可以查看视图的定义

修改视图

通过CREATE OR REPLACE VIEW语句和ALTER语句来修改视图。

(1)CERATE OR REPLACE [ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE }] VIEW view_name [(column_name, .. ,column_name)] AS SELECT statement [WITH [CASCADED | LOCAL] CHECK OPTION];

(2)ALTER [ALGORITHM = { UNDEFINED | MERGE | TEMPTABLE }] VIEW view_name [(column_name, .. ,column_name)] AS SELECT statement [WITH [CASCADED | LOCAL] CHECK OPTION];

删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。

DROP VIEW [IF EXISTS] view_name,[view_name] [RESTRICT | CASCADE]

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纠结的逗号

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值