理解视图, 创建,修改,使用视图
了解视图
视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候, 主要的工作就落在创建这条SQL查询语句上。
视图是对若干张基本表的引用, 一张虚表, 查询语句执行的结果, 不存储具体的数据(基本表数据发生了改变, 视图也会跟着改变)
可以跟基本表一样, 进行增删改查操作(ps:增删改操作有条件限制)
方便操作, 特别是查询操作, 减少复杂的SQL语句, 增强可读性
更加安全, 数据库授权命令不能限定到特定行和特定列, 但是通过合理创建视图, 可以把权限限定到行列级别
创建视图
DROP VIEW IF EXISTS 'view_name';
CREATE VIEW 'view_name'
AS (
SELECT ta.id,ta.name, tb.age, tb.sex
FROM tablea AS ta
LEFT JOIN tableb AS tb ON ta.id=tb.ta_id
WHERE ta.id>20
);
操作视图
SELECT 操作
SELECT name,age,sex FROM view_name WHERE id=2
和普通的表一样, 查询操作视图搜索即可CRUD 操作
UPDATE view_name SET name='xx',age=18 WHERE id=2
如果不出意外, 你会得到错误提示!! 因为不能在一张由多张关联表连接而成的视图上做同时修改两张表的操作
视图与表是一对一关系情况:如果没有其它约束(如视图中没有的字段, 在基本表中是必填字段情况), 是可以进行增删改数据操作
查看视图
- DESCRIBE
通过DESCRIBE view_name
查看视图的字段定义 - SHOW CREATE VIEW
通过SHOW CREATE VIEW
查看视图的创建语句
修改视图
CREATE OR REPLACE VIEW view_name
AS (
SELECT ta.id,ta.name, tb.age, tb.sex
FROM tablea AS ta
LEFT JOIN tableb AS tb ON ta.id=tb.ta_id
WHERE ta.id<=20
)
删除视图
DROP VIEW IF EXISTS view_name
WITH CHECK OPTION
如果创建视图时,使用WITH CHECK OPTION
选项, 如:
DROP VIEW IF EXISTS 'view_name';
CREATE VIEW 'view_name'
AS (
select id, name, age
from my_table
where age>20
)
WITH CHECK OPTION
- 对于UPDATE,有WITH CHECK OPTION, 要保证UPDATE后, 数据要被视图查询出来
- 对于DELETE,有无WITH CHECK OPTIOn都一样
- 对于INSERT,有WITH CHECK OPTION, 要保证INSERT后, 数据要被视图查询出来
- 对于没有WHERE 子句的视图, 使用WITH CHECK OPTION是多余的