视图
含义:虚拟表,和普通表一样使用
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(‘飞飞飞’,‘123@qq.com’,200000); #失败
create or replace view myv1
as
select last_name,email "annual salary"
from employees
insert into myv1 values(‘飞飞飞’,‘123@qq.com’); #成功,原始表也插入
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 基础+高级篇.