我们接着上一讲继续啊,上一讲我们说了什么是视图,如何创建视图,如何删除视图,这一节我们来说一下如何修改、更新视图。

当然啊,说之前我先来说说这两个操作的区别,不要以为它们是一样的啊

修改视图,是修改视图的名称、以及SQL语句等内容

更新视图,是指通过视图去做insert、update、delete等操作,因为视图是一个虚表,其中并没有数据,我们这样去更新视图都是转换成对具体的表的操作的。当然啊,更新视图的时候,只能更新权限范围内的数据,超过这个范围就不能更新了。

修改视图

修改视图我们同样是通过命令,这里我给出来

CREATE OR REPLACE ( ALGORITHM =( UNDEFINED 或 MERGE 或 TEMPTABLE ))
VIEW 视图名 ( 属性清单 )
AS SELECT 语句
( WITH ( CASCADED 或 LOCAL ) CHECK OPTION );

其实和创建差不多,这个也能用来创建,因为是 CREATE OR REPLACE,然后我们现在来通过这个命令去创建一个视图。

MYSQL根据视图修改表 mysql视图的修改_修改视图

然后我们来刷新一下视图

MYSQL根据视图修改表 mysql视图的修改_mysql_02

我们查看一下这个视图

MYSQL根据视图修改表 mysql视图的修改_mysql_03

OK的啊,然后我们再来修改一下这个视图,还是用这个命令,就是换一下这个SQL语句。

MYSQL根据视图修改表 mysql视图的修改_修改视图_04

再来运行一下

MYSQL根据视图修改表 mysql视图的修改_修改视图_05

OK的啊,接着我们再来使用另外一个修改命令

ALTER ( ALGORITHM =( UNDEFINED 或 MERGE 或 TEMPTABLE ))
VIEW 视图名 ( 属性清单 )
AS SELECT 语句
( WITH ( CASCADED 或 LOCAL ) CHECK OPTION );

实际上也就是把 CREATE OR REPLACE 修改成 ALTER了,我们再来修改一下 lemon234_1 这个视图

MYSQL根据视图修改表 mysql视图的修改_mysql_06

接着我们来查看一下新修改的这个视图

MYSQL根据视图修改表 mysql视图的修改_视图_07

摩玛带啊(西安话),其实修改我们是常用的,然后我们来说这个更新视图。

更新视图

更新视图,我再文章最前面说了啊,这个到最后就是转换成对实体表的操作,所以我们来尝试一下。

首先先查看一下我们的 lemon1234_1的这个视图。

MYSQL根据视图修改表 mysql视图的修改_更新视图_08

然后我们将张三的名字给他弄成李四。

MYSQL根据视图修改表 mysql视图的修改_mysql_09

这里需要注意,你要用视图里面的名字啊,别弄成name啊,千万要记住!!!

然后我们再来看一下视图。

MYSQL根据视图修改表 mysql视图的修改_MYSQL根据视图修改表_10

可以看到啊,我们将这个张三的名字修改成李四了,然后我们再来看看这个实际的表。

MYSQL根据视图修改表 mysql视图的修改_MYSQL根据视图修改表_11

也是OK的啊,也被修改掉了。这就证实了我前面说的,实际上是对具体的表进行操作。

我们再来将李四的性别也修改一下,现在不是 1 吗,我们给他通过视图修改成 2 ,我们再来试一下。

MYSQL根据视图修改表 mysql视图的修改_mysql_12

可以看到啊,报错了,原因是找不到这个sex,这也就是说明了限制,虽然实际的表中存在,但是我们没有办法去修改,因为视图中不存在。

当然啊,我们再来试试这个插入和删除,先来说插入,直接上图。

MYSQL根据视图修改表 mysql视图的修改_mysql_13

我们当时弄这个 t_student 表的时候啊,我们的这个id主键是自动递增的,但是到了这个视图,发现这个用不了了,报错了,这也就是说,表是表,视图是视图。所以我们给定一个id,我们再来添加。

MYSQL根据视图修改表 mysql视图的修改_视图_14

查看一下

MYSQL根据视图修改表 mysql视图的修改_MYSQL根据视图修改表_15

MYSQL根据视图修改表 mysql视图的修改_更新视图_16

当然啦,其他的字段肯定是空,道理和这个UPDATE的时候是一样的,视图中不存在,所以没有办法添加。

然后是删除,我们再将陈胖这条数据删除了。

MYSQL根据视图修改表 mysql视图的修改_视图_17

再来查看一下视图和表

MYSQL根据视图修改表 mysql视图的修改_MYSQL根据视图修改表_18

MYSQL根据视图修改表 mysql视图的修改_修改视图_19

 

很好啊,大家多多练习一下,先讲到这里,明天开始弄触发器。