mySql视图-初学者

什么是视图? 它是一个【虚拟表】
怎么来的? 从数据库中的一张或者多张表导出的
干什么用的?
1. 方便用户操作
要求所见即所需,无需添加额外的查询条件,直接查看;
2. 增加原数据的安全性
通过试图,用户只能查看或者修改制定的数据;
3. 提高表的独立逻辑性
原有数据表结构的变化,不会影响视图,如果修改原有列,责只需要修改视图即可。
是否有权限创建?
通过sql查询

select select_priv,create_view_priv from mysql.user where user ='root';

返回的都是Y就是有对应的权限

一、创建视图

1、语法:
create
[algorithm = {undefined | merge | temptable}]
view 视图名 [{属性清单}]
as select 语句
[with [cascaded|local] check option];
algorithm:选择的算法
with check option:表示更新视图时要保证在该视图的权限范围之内
undfined:表示 MySQL 自动选择所需使用的算法
merge:表示将视图的语句与视图的定义合并,使得视图定义的某一部分取代语句的对应部分
temptable:将视图的结果存入临时表
cascaded:表示更新视图时要满足所有相关视图和表的条件
local:表示更新视图时,要满足该视图本身的定义的条件即可。

  1. 单表创建视图
CREATE VIEW Course_view as SELECT * FROM Course;
  1. 多表创建视图
CREATE algorithm = merge VIEW  StudentScore_view as  
SELECT t.s_name,t.s_sex,t3.c_name,t2.s_score FROM Student t ,Score t2 ,Course t3 WHERE t.s_id = t2.s_id and t2.c_id = t3.c_id

二、查看视图

  1. desc + 视图名称查看视图;
desc StudentScore_view
  1. show table status
show table status like 'StudentScore_view' \G;

studentscore_view 是虚拟表
3. show create view 视图名

show create view StudentScore_view \G;

查看视图建表语句
4. 在veiws 表中查看

select * from information_schema.views \G;

视图信息

三、修改视图

  1. 通过 create or replace view 修改(如果没有则创建,有则修改)
create or replace algorithm = temptable view course_view as select * from course where c_id in ('01','02');
  1. 通过alter 修改(只能修改不能创建)
alter view course_view as select * from course with check option;

四、更新视图

  1. 查看视图信息
select * from course_view ;

在这里插入图片描述

  1. 更新视图
    注意:并非所有的视图都能更新!!!
update course_view  set c_name = '语文';

-- 比如说我这个,我更新报错了,ERROR 1288 (HY000): The target table course_view of the UPDATE is not updatable
报错原因为:(我的course表有主键,切其余字段都定义了不为空)
so 我更新了别的表 --
update studentscore_view set s_name='王宇';
mysql> select * from studentscore_view ;
+--------+-------+--------+---------+
| s_name | s_sex | c_name | s_score |
+--------+-------+--------+---------+
| 王宇   || 语文   |      80 |
| 王宇   || 数学   |      90 |
| 王宇   || 英语   |      99 |
+--------+-------+--------+---------+
所有的名字都让我改成了同一个人~~
当视图中包含有如下内容时,视图的更新操作将不能被执行:
(1)视图中包含聚合函数时:
(2)视图中包含 unionunion alldistinctgroup byhaving 等关键字
(3)常量视图
(4)视图中的 select 中包含子查询
(5)由不可更新的视图导出的视图
(6)创建视图时,algorithmtemptable 类型
(7)视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。
[最好视图仅限于查询,若要更新则要考虑全面,否则会造成更新失败]

五、 删除试图

  1. 语法
    drop view [if exists] 视图列表
drop view if exists course_view;
--Query OK, 0 rows affected (0.01 sec)
  1. 判断是否有删除权限
select drop_priv from mysql.user where user='root';
-- mysql> select drop_priv from mysql.user where user='root';
+-----------+
| drop_priv |
+-----------+
| Y         |
+-----------+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值