02-013 MySQL_基础_视图

视图

含义:虚拟表,和普通表一样使用
MySQL5.1版本出现的新特性,是通过表动态生成的数据
特点:临时、重复利用、只保存了SQL逻辑,不保存查询结果

创建视图

create view 视图名
as
查询语句

create view v1
as
select stuname,majorname
from stuinfo s
inner join major m on s.majorid = m.id;
执行上一句后可以直接使用如下:
select * from v1 where stuname like '张%';

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

修改视图

①create or replace view 视图名
as
查询语句

create or replace view v1
as
select stuname,majorname
from stuinfo ;
执行上一句后可以直接使用如下:
select * from v1 where stuname like '张%';

②alter view 视图名
as
查询语句

删除视图

drop view 视图名,视图名…;

查看视图

desc 视图名;
show create view 视图名;

视图的更新

1.插入不成功也可能成功

create or replace view myv1
as
select last_name,email,salary*12*(1+ifnull(commission_pct,0)) "annual salary"
from employees

insert into myv1 values(‘飞飞飞’,‘[email protected]’,200000); #失败

create or replace view myv1
as
select last_name,email "annual salary"
from employees

insert into myv1 values(‘飞飞飞’,‘[email protected]’); #成功,原始表也插入
2.修改(原始表也修改)
update myv1 set last_name=‘张’ where last_name=‘飞飞飞’;
3.删除(原始表也删除)
delete from myv1 where last_name = ‘张’;

一般不允许更新视图,所以经常给视图添加只读权限,只能读但是不能更新。
4. 具备以下特点的视图不允许更新
①包含以下关键字:分组函数、distinct、group by 、having、union或者union all;
②常量视图;
③select 中包含子查询;
④用到连接如join;
⑤from 一个不能更新的视图;
⑥where子句的子查询引用了from子句的表;

create or replace view myv6
as
select last_name,email,salary
from employees
where employ_id in(
	select manager_id
	from employees
	where manager_id is not null
);

基本上都不能更新。

视图与表的区别

创建关键字 数据是否占用物理空间 使用
视图 create view 只保存逻辑 一般不能增删改
create table 占用 增删改查

delete和truncate在事务使用时的区别

set autocommit=0;
start transaction;
delete table account;
rollback;

set autocommit=0;
start transaction;
delete table account;
rollback;

truncate并不支持回滚。

学习整理于MySQL 基础+高级篇.

发布了53 篇原创文章 · 获赞 0 · 访问量 390

猜你喜欢

转载自blog.csdn.net/weixin_40778497/article/details/103624407