Mysql13—— 视图

含义:虚拟表,和普通表一样使用

mysql5.1版本出现的新特性,是通过表动态生成的数据

案例:查询姓张的学生名和专业名

SELECT stuname,majorname

FROM stuinfo s

INNER JOIN major m ON s.`majorid`=m.`id`

WHERE s.`stuname` LIKE '张%‘;

CREATE VIEW v1

AS

SELECT stuinfo s

INNER JOIN major m ON S.`MAJORID`=M.`id`;

SELECT * FROM v1 WHERE stuname LIKE '张%’;

一、创建视图

语法:

create view 视图名

as 

查询语句;

 USE myemployees;

案例:查询邮箱中包含a字符的员工名、部门名和工种信息

创建

CREATE VIEW myv1

AS 

SELECT last_name,department_name,job_title

FROM employees e

JOIN departments d ON e.department_id = d.department_id

JOIN jobs j ON j.job_id = e.job_id;

使用

SELECT * FROM myv1 WHERE last_name LIKE '%a%';

 优势:

  • 重用sql语句
  • 简化复杂的sql操作,不必知道它的查询细节
  • 保护数据,提高安全性

二、视图的修改

方式一:

create or replace view 视图名

as

查询语句;

CREATE OR REPLACE VIEW myv3

AS

SELECT AVG(salary),job_id

FROM employees

GROUP BY job_id;

 方式二:

语法:

alter view 视图名

as

查询语句

alter view myv3

as

select * from employees;

 三、删除视图

语法

drop view 视图名,视图名,...;

四、查看视图

DESC myv3;

SHOW CREATE VIEW myv3;

五、视图的更新

CREATE OR REPLACE VIEW myv1

AS 

SELECT last_name,email,salary*12*(1+IFNULL(commission_pct,0)) "annual salary"

FROM employees;

SELECT * FROM myv1;

1、插入

INSERT INTO myv1 VALUES('张飞','zf@qq.com');

2、修改

UPDATE myv1 SET last_name = '张无忌' WHERE last_name=''

3、删除

DELETE FROM myv1 WHERE last_name = '张无忌';

具备以下特点的视图是不允许更新的:

  • 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
  • 常量视图
  • select中包含子查询
  • join
  • from一个不能更新的视图
  • where子句的子查询引用了from子句的表
    是否实际占用物理空间 使用
视图 create view 只是保存了sql逻辑 增删改查,一般不能增删改
create table 保存了数据 增删改查
原文地址:https://www.cnblogs.com/stu-jyj3621/p/14297733.html