MySQL 视图View的SQL语法和更新(视图篇 二)

视图语法基本操作

创建

-- [ ]表示可选
create [or replace] view 视图名称[(列名列表)] as
select语句
[ with [cascaded | local ] check option ];

添加(虽然视图是虚拟表,但是向视图操作的数据实际上会影响到实际关联的表数据)

-- 视图添加一条数据,实际的表也会多一条数据

insert into 视图名称
values(数据列表);

修改

-- 方式一:和创建视图一样,create or replace :如果视图存在则替换
create or replace view 视图名称[(列名列表)] as
select语句
[ with [ cascaded | local ] check option ];

-- 方式二

alter view 视图名称[(列名列表)] as
select语句

[ with [ cascaded | local ] check option ]

删除

drop view [if exsts] 视图名称;

查询

-- 查询视图数据

select * from 视图名称;

-- 查看创建视图语句

show create view 视图名称;

视图检查选项介绍:with [ cascaded | local ]  check option

当创建视图时使用 "with check option" 可以限制插入或更新视图数据的条件

-- 创建视图(查询语句条件: where order_total >= 1000),添加检查选项

create view highvalue as

select order_id, customer_id, order_total from orders where order_total >= 1000

with check option;

-- 操作数据

insert into highvalue (order_id, customer_id, order_total)

values (1, 123, 800);

由于插入的订单总额不符合视图的条件(order_total >= 1000),操作将被拒绝,并抛出错误。

关于选项cascaded(默认值) 和 local介绍

假设有两个视图:viewA和viewB,viewA依赖viewB(并且查询语句都有条件)

--  create viewA  as select * from viewB where 条件;

viewA使用with  cascaded  check option

viewB使用with local  check option

1、当向viewA插入数据时,MySQL不仅会检查ViewA的视图条件,还是检查viewB的条件,二者都满足才能成功插入数据

2、当向viewB插入数据时,MySQL只会检查viewB的视图条件(不管viewA条件),如果满足就能成功插入数据

视图的更新问题

一般的视图都会随着关联表数据变化而更新

有一些情况下,视图是不会更新的,如果视图包含以下任何一项,则该视图不可更新:
1. 视图使用了聚合函数或窗口函数(sum()、 min()、 max()、 count()等)
2. distinct
3. group by
4. having
5. union 或者 union all
6.视图包含子查询
7.联接(join)
8.存储过程和触发器

上一篇:MySQL了解视图View (视图篇 一)

你可能感兴趣的:(MySQL数据库,mysql,sql,数据库)