码迷,mamicode.com
首页 > 数据库 > 详细

MySQL-view

时间:2019-05-24 09:14:13      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:需要   engines   一个数据库   跨表   方式   文件   utf8   mysq   16px   

一.视图的定义
1.**在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。**是从一个或几个基本表(或视图)中导出的**虚拟**的表。
2.**视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。** 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。
3.**视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据**;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些视图可以修改对应的基表,而有些则不能(仅仅能查询)。

二.视图的创建
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;

如果涉及到数据量过大,业务逻辑需要跨表查询等等也可建立一个跨表的视图,有三种情况:
1.基于同一数据库
这种情况较为简单,只需简单的一行sql命令,如下:
**create view v as (select * from table1) union all (select * from table2);**

2.基于不同数据库
这种情况只比上面的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下建立视图,反之亦然;

3.基于不同服务器
这种情况稍微麻烦一点,需要先建立一个远程表来访问远程服务器的数据表,然后再对这个刚建立的远程表和本地表进行视图,步骤如下:
(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);

三、view的别名
1.CREATE VIEW view_name(别名1,别名,...)
AS
SELECT name1,name2
FROM
table_name;
2.CREATE VIEW view_name
AS
SELECT name1 AS 别名1,name2 AS 别名2
FROM table_name;



参考大佬博客:https://www.cnblogs.com/sening/p/4526163.html

MySQL-view

标签:需要   engines   一个数据库   跨表   方式   文件   utf8   mysq   16px   

原文地址:https://www.cnblogs.com/aczy/p/10915597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!