CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select语句
[WITH [CASCADED | LOCAL] CHECK OPTION]
-
OR REPLACE
:表示替换已有视图; -
ALGORITHM
:表示视图选择算法,默认算法是UNDEFINED
(未定义的):MySQL
自动选择要使用的算法 ;merge
合并;temptable
临时表; -
column_list
:可选参数,指定视图中各个属性的名词,默认情况下与select
语句中查询的属性相同; -
select_statement
:表示select
语句; -
[WITH [CASCADED | LOCAL] CHECK OPTION]
:表示视图在更新时保证在视图的权限范围之内;cascade
是默认值,表示更新视图的时候,要满足视图和表的相关条件;local
表示更新视图的时候,要满足该视图定义的一个条件即可。
常用单表创建:
1.
create view viewName as select 列名 , ... from tableName;
列名可以进行简单的运算,如列名为两个整数型列名相加,得到和列
视图列名和table列名相同;
2.
create view viewName(name_1,,...,name_n) as select 列名1...列名n from tableName;
视图列名将会对应的变成name_1....
3.
create view viewName as select 列名 , ... from tableName limit 2;
创建不可更新视图
多表连接:
查询视图
select * from viewName;
#显示视图
DESC viewName;
#显示视图结构
更新视图
视图是逻辑表,也就是说视图不是真实的表,但操作视图和操作普通表的语法是一样的。
用户可以在视图中无条件地使用select
语句查询数据。但使用insert
、update
和delete
操作需要在创建视图时满足以下条件(满足以下条件的视图称为可更新视图):
-
from
子句中只能引用有1
个表(真实表或可更新视图); -
不能包含
with
、distinct
、group by
、having
、limit
等子句; -
不能使用复合查询,即不能使用
union
、intersect
、except
等集合操作; -
select
子句的字段列表不能包含聚合、窗口函数、集合返回函数。
修改视图
update viewName set 列=... where 过滤条件(如id);
删除视图
drop view viewName;