我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

说说mysql中最简单基础的部分:视图view。视图在mysql的相关应用中,是比较常见的。使用的时候和普通的数据表是非常类似的,唯一有较大区别的地方是:视图有一定的概率是只读的,不能像数据表一样修改数据和删除数据。

苏南大叔:mysql数据库,如何创建删除修改查询一个视图view? - mysql-视图
mysql数据库,如何创建删除修改查询一个视图view?(图5-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文测试环境:win10mysql@5.7.26。在本文中,你将了解到mysql视图的使用方式。

基础数据表

视图是以普通的表为基础的,所以视图的前提是有普通的数据表。本文的测试数据表如下:

CREATE TABLE `pets` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `pets` VALUES (1,'小黑',1),(2,'虎子',2),(3,'二赖子',2),(4,'老白',3),(5,'老许',3),(6,'小白',3);
CREATE TABLE `pets_category` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`cid`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `pets_category` VALUES (1,'大猫'),(2,'大狗'),(3,'小猫');

苏南大叔:mysql数据库,如何创建删除修改查询一个视图view? - 测试数据
mysql数据库,如何创建删除修改查询一个视图view?(图5-2)

创建视图

确定已经有了基础的数据表之后,就可以把对基础表的select语句转化为视图了。

CREATE VIEW [视图名称] AS [SELECT语句];

可以建立一个仅仅涉及单表的视图:

CREATE VIEW view_pets as select id,name FROM pets;

这是一个最经典的带分类表的联合查询

CREATE VIEW view_pets2 as select a.id,a.name,a.cid,b.name as cname FROM pets as a left join pets_category as b using(cid);

这个视图还可以自定义字段名称,例如:

CREATE VIEW view_pets3(pet_id,pet_name,pet_category_id,pet_category_name) as select a.id,a.name,a.cid,b.name as cname FROM pets as a left join pets_category as b using(cid);

苏南大叔:mysql数据库,如何创建删除修改查询一个视图view? - 测试视图
mysql数据库,如何创建删除修改查询一个视图view?(图5-3)

删除视图

当然,最简单的方法是在mysql的各种可视化工具里面删除,比如:本文中苏南大叔使用的MYSQL-Front可视化工具。但是,为了体现极客范儿以及更广泛的适用性,苏南大叔使用sql命令来删除视图。

DROP VIEW IF EXISTS [视图名称]

删除视图,虽然需要细心确认。但是,视图里面实际并没有存储数据,所以误删除了也不要特别担心。只要有建表语句就还可以瞬间恢复回来(包括所有的数据)。

修改视图

ALTER VIEW [视图名称] AS [SELECT语句]
ALTER VIEW view_pets as select id as pet_id,name FROM pets;

就是简单的把创建视图的create换成了alter

苏南大叔:mysql数据库,如何创建删除修改查询一个视图view? - 更改视图
mysql数据库,如何创建删除修改查询一个视图view?(图5-4)

对视图数据的增删改查

对于视图来说,把其属性想象成普通的表即可。理论上来说,经典的select/update/insert/delete语句,都是可以执行的。

但是,由于视图里面的数据只是其它表的一部分,或者多部分。所以,为了防止出现逻辑上的意外,只有数据来自同一个表的视图默认是可写的。

视图本身可能是只读的,

  • 如果视图是以某一个视图为基础创建的,那么,这个视图大概率是可写的。
  • 如果视图使用了聚合函数的话,那么,这个视图就必然是不可写的。
  • 如果视图使用了多个表联合查询的话,那么,这个视图也是不可写的【最常见】。

苏南大叔:mysql数据库,如何创建删除修改查询一个视图view? - 只读的视图
mysql数据库,如何创建删除修改查询一个视图view?(图5-5)

最终的建议是:
可以主动或者被动的选择:只对视图执行select语句,不执行update/insert/delete语句,这是个非常好的选择。

关于视图只读的话题,后续会有新的文章进行描述。

参考文章

结束语

更多mysql的经验文章,可以参考苏南大叔的文章链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   mysql