-- 视图:
/*
一、含义:虚拟表,视图和普通表的用法一样。视图是通过表动态生成的数据
视图中没有保存具体的数据,只保存了SQL逻辑
换一句话说,视图中其实是保存的SQL语句,语句的查询结果(表)作为视图的数据映像。
我们可以通过查询视图,更方便的查询到我们所需要的的内容
二、创建视图:
use 库名;
create view 视图名
AS
复杂的SQL语句;
三、修改视图
方法:1(存在则修改,不存在则创建)
create or replace 视图名
AS
修改后的SQL语句;
方法2:(纯修改)
alter view 视图名
AS
修改后的SQL语句;
四、删除视图
drop view 视图名1,视图名2,...;
五、查看视图
①:desc 视图名; (和查看表的结构的语法一致)
②:show create view 视图名; (可以查看创建视图的语句、编码)
六、视图的更新(是对视图中查询的结果进行更新,不是更新视图的SQL语句)
注:视图基本上是不能更新的
1.插入: insert into 视图名 values(值) where 条件;
2.更新: update 视图名 set 值 where 条件;
3.删除: delete from 视图名 where 条件;
【具备以下特点的视图,是不允许更新的】
①包含关键字:分组函数、distinct、group by、having、union/union all
②常量视图
create or replace view a
select 'huxuehao' name;
③select中包含子查询
create or replace view a
select (select name from table where id=1);
④sql语句中含有join(或SQL92语法中的连接)
⑤from 后面是一个不能更新的视图
⑥where 子句的子查询引用了from子句中的表
*/
-- 例如:
# 创建一个视图:员工工作名称中含有's'的员工的id,NAME
CREATE VIEW CityName_contain_s
AS
SELECT employee_id,first_name,last_name
FROM employees
INNER JOIN jobs
on employees.job_id=jobs.job_id
WHERE job_title LIKE 's%';
# 通过视图查询我们想要的内容:
-- 查询:员工工作名称中含有's',且id在150-170之间的员工的first_name
SELECT first_name
FROM CityName_contain_s
WHERE employee_id between 150 and 170;
-- 通过view来查询,要方便的多
-- 查看视图
DESC CityName_contain_s;
show create view CityName_contain_s;
-- 删除视图
drop VIEW CityName_contain_s;
23视图 ——MySQL
最新推荐文章于 2024-08-18 15:09:09 发布