标签:需要 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
标签:需要 engines 一个数据库 跨表 方式 文件 utf8 mysq 16px
原文地址:https://www.cnblogs.com/aczy/p/10915597.html