MySql創建視圖

(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

);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章