本文优化并补充了大佬的文章:https://www.cnblogs.com/chenpi/p/5133648.html
https://blog.csdn.net/moxigandashu/article/details/63254901
1.视图的定义
①视图是一条SELECT语句执行后返回的结果集
②视图是虚拟表,在物理意义上不存在的,即MYSQL没有专门的位置为视图存储数据,视图的数据都来源于查询语句。
③视图的作用是封装了复杂的查询语句。
2.视图的操作
#创建视图
CREATE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
#查看数据库已有视图
USE DB_NAME ;
SHOW TABLES [like...];
(可以使用模糊查找);
#查看视图详情
①SHOW TABLE STATUS [FROM DB] [LIKE ....]
②USE DB_NAME;
SHOW CREATE VIEW VIEW_NAME;
③DESCRIBE/DESC VIEW_NAME
#删除视图
DROP VIEW VIEW_NAME;
#修改视图的查询语句
①CREATE OR REPLACE VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
②ALTER VIEW 视图名(列1,列2...) AS SELECT (列1,列2...) FROM ...;
#查看视图数据
SELECT 列名 FROM VIEW_NAME;
#利用视图操作基本表
添加数据:INSERT INTO VIEW_NAME(列1,列2...) VALUE (数据1,数据2....);
删除数据:DELECT FROM VIEW_NAME WHERE ....;
修改数据:UPDATE VIEW_NAME SET XXX=... WHERE ....;
#确保视图一致性
创建视图时在最后加WITH CHECK OPTION;
WITH CHECK OPTION可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。
3.视图的特点
①方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性。
②更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别,通俗点讲,就是说我们可以隐藏某些字段,只给用户看特定的字段,用户就无法知道基本表的完整结构了。
③视图与基本表的数据是同步的,不管对哪一方进行数据操作,都会影响另一方。
④如果视图和基本表是一对一的关系,那我们可以通过视图对表数据进行增删改操作。
⑤视图的列可以来自不同的基本表,但如果来自不同的基本表时,不允许增删数据,只能修改数据。
⑥从视图对基本表进行增改操作时,要注意基本表的约束,举个例子,假设有个基本表(name,age),其中name有非空约束,现在有个对应的视图(age),用户想通过视图往基本表里添加一行记录age=11,这时MYSQL就会报错,因为用户往基本表里插入的是name=null,age=11,不符合非空约束。