MySQL的视图(二十二)下

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: MySQL的视图(二十二)下

四. 修改视图


修改已经存在的视图,有两种方式,一种是 create or replace, 另外一种是用 alter .


四.一 create or replace 重新创建视图


修改视图,用的是 or replace ,会重新创建一个新的视图。


如 修改 视图 v_user1, 改变 查询 name 和 age 的视图。 不能改变视图名称,只改变查询结果。


create or replace view v_user1(name,age)
  as (select name,age from user) ;

20200401162145968.png


查询一下数据:


select * from v_user1;


20200401162153627.png


会发现,视图 v_user1 被修改了。


注意,此时如果视图名称不存在,那么将会创建一个新视图。


四.二 alter view view_name 重新创建视图


修改视图,而不是 存在时修改,不存在时创建,那么可以直接使用 alter 进行修改


如 修改 v_user2 ,让其只查询 id 和 name 两个列。


alter view v_user2 (id,name)
as (select id,name from user);


20200401162203573.png


将 create or replace 替换成 alter .


重新查询 v_user2 的话:


select * from v_user2;


20200401162316639.png


问题1: 如果 alter 修改的是一个不存在的视图, 如 v_user100 时,会出现什么情况呢?


alter view v_user100 (id,name)
as (select id,name from user);


20200401162242535.png


ERROR 1146 (42S02): Table ‘yuejl.v_user100’ doesn’t exist


会报错,提示视图不存在。


五. 使用/更新 视图


视图是一个虚拟表,没有存储数据,所以对视图数据的更新,实际上都转移到对基本表的更新上了。但是,不建议对视图进行更新操作, 只提倡查询。


五.一 查询数据


如 查询视图 v_user2


select * from v_user2;


20200401162331686.png


v_user2 里面,有两个字段, id 和 name.


五.二 插入数据


当前, user 表 还是9条数据, 没有发生改变。


select * from user;


2020040116234059.png


往视图 v_user2 里面插入一条数据, id 是10, 名称为 新员工5.


insert into v_user2(id,name) values(10,'新员工5');


20200401162352684.png


这个时候,重新查看一下 v_user2 视图数据


select * from v_user2;


20200401162359532.png


查看一下基本表 user中的数据


select * from user;


20200401162406729.png


可以看出,正常的插入到视图(准确说是基本表)里面了.


五.三 更新数据


如将 视图 v_user2 里面的 id=10 新插入的那个数据 的员工名称 改变 ‘我是新来的员工5’


update v_user2 set name='我是新来的员工5' where id=10;


20200401162414520.png


查看一下基本表 user 中的数据


select * from user;

20200401162421660.png


五.四 删除数据


如将 视图 v_user2 里面的那条 id=10 的数据删除。


delete from v_user2 where id=10;


20200401162429481.png


再重新查询一下 user 表的数据


select * from user;


20200401162438913.png


五.五 约束性视图


在实际开发生活中,是不允许你通过更新视图进行改变基本表的数据, 所以常常会增加一些限制。


如 创建一个新视图 v_user3, 里面有 id 和 name 两个字段,但是有限制。


create or replace 
  view v_user3 (id,name)
  as (select id,name from user where id<20)
  with check option;


20200401162445974.png


从表里面查询出来的数据,必须要保证 id<20.


那么,此时 查询一下视图:


select * from v_user3;


20200401162457902.png


如果此时,往视图里面 添加 一条 id=100 的新数据(100>20)


insert into v_user3 (id,name) values(100,'新约束员工');

20200401162506793.png


ERROR 1369 (HY000): CHECK OPTION failed ‘yuejl.v_user3’


会发现,不能插入进去 。


如果此时,往视图里面添加 一条 id=11 的新数据 (11<20)


insert into v_user3 (id,name) values(11,'新约束员工');


20200401162517671.png


可以正确地插入


重新查询一下数据:


select * from user;


20200401162528757.png


添加 with check option 之后,维护后的数据不能确定视图的完整性。


六. 删除视图


命令:


drop [if exists] view view_name;


如删除 视图 v_user3


drop view v_user3;


20200401162554947.png


再次查询视图 v_user3的话:


select * from v_user3;


20200401162603769.png


如果删除一个不存在的视图, 那么也会报错的。


删除视图,支持同时删除多个视图, 如再删除 v_user1和 v_user2


drop view v_user1,v_user2;


20200401162613843.png


视图是非常重要的,老蝴蝶建议一定要掌握其常见用法。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 关系型数据库 MySQL
MySQL中如何创建一个视图
MySQL中如何创建一个视图
29 0
|
18天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(2)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
18天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(1)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
29天前
|
存储 SQL 关系型数据库
mysql 高阶语句 与视图
mysql 高阶语句 与视图
|
1月前
|
关系型数据库 MySQL 索引
【MySQL】视图 -- 详解
【MySQL】视图 -- 详解
|
11天前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
16天前
|
安全 关系型数据库 MySQL
MYSQL--视图操作
MYSQL--视图操作
|
14天前
|
SQL 关系型数据库 MySQL
MySQL数据库练习——视图
MySQL数据库练习——视图
16 1
|
18天前
|
存储 SQL 关系型数据库
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】(3)
MySQL 进阶使用【函数、索引、视图、存储过程、存储函数、触发器】
|
1天前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之在将RDS迁移到PolarDB后,原先由root用户创建的视图、存储过程等是否可以继续使用的
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。