(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);
落霞與孤鶩齊飛,秋水共長天一色。
創建視圖語句:
`report_adinfo`
CREATE
/*[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = { user | CURRENT_USER }]
[SQL SECURITY { DEFINER | INVOKER }]*/
VIEW `testsql`.`report_adinfo`
AS
(SELECT u.id AS id,u.account AS account,r.name AS rolename, d.simplename AS simplename,GROUP_CONCAT(m.name) AS menuname
FROM
sys_user AS u,
sys_role AS r,
sys_relation AS rm,
sys_menu AS m,
sys_dept AS d
WHERE
u.roleid = r.id
AND u.deptid = d.id
AND r.id = rm.roleid
AND rm.menuid = m.id
GROUP BY id
);