目录
一、含义
mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成。
视图可以理解为编程中的函数。
好处:
1、简化sql语句
2、提高了sql的重用性
3、保护基表的数据,提高了安全性
二、创建视图
create view 视图名
as
查询语句;
例1:创建一个视图V1,该视图的内容为查询student表中张的学生名(stuname)
CREATE VIEW V1
AS
SELECT stuname
FROM student;
视图的使用:
例2:查询student表中张的学生名(stuname)
select * from V1
三、修改视图
方式一:
create or replace view 视图名
as
查询语句;//该视图如果没有就创建一个,如果有就替换,替换就相当于把这个视图修改了
例:将视图V1的内容修改为,查询学生表中所有性别(sex)为男的学生名(stuname)
CREATE OR REPLACE VIEW V1
AS
SELECT stuname
FROM student
WHERE sex='男';
方式二:
alter view 视图名
as
查询语句;
例:将视图V1的内容修改为,查询学生表中所有性别(sex)为男的学生名(stuname)
ALTER VIEW V1
AS
SELECT stuname
FROM student
WHERE sex='男';
四、删除视图
drop view 视图1,视图2,...;
五、查看视图
1、desc 视图名;
2、show create view 视图名;
六、使用视图
1.插入:insert
例:在视图V1里,插入id为5,名字为张三,性别为男(该视图学生表结构为:id stuname sex)
INSERT INTO myv1 VALUES(5,'张三','男');
2.修改:update
例:修改视图V1,把张三的学生名(stuname)改为李四
UPDATE V1 SET stuname = '李四' WHERE stuname='张三';
注意:具备以下特点的视图不允许更新
①包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
②常量视图
如:
CREATE OR REPLACE VIEW v2
AS
SELECT 'john' NAME;
③Select中包含子查询
④join
⑤from一个不能更新的视图
如:
CREATE OR REPLACE VIEW v5
AS
SELECT * FROM v3;
⑥where子句的子查询引用了from子句中的表
3.删除:delete
例:删除视图V1中学生名为王五的。
DELETE FROM V1 WHERE stuname = '王五';
4.查看:select
七、视图和表的对比
关键字 | 是否占用物理空间 | 使用 | |
视图 | view | 占用较小,只保存sql逻辑 | 一般用于查询 |
表 | table | 保存实际的数据 | 增删改查 |