mysql概要(八)视图

CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
       VIEW 视图名 [(属性清单)]
       AS SELECT 语句
       [WITH [CASCADED|LOCAL] CHECK OPTION];

ALGORITHM表示视图选择的算法(可选参数)

      UNDEFINED:MySQL将自动选择所要使用的算法
      MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
      TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句

视图名表示要创建的视图的名称

属性清单表示视图中的列名,默认与SELECT查询结果中的列名相同(可选参数)

WITH CHECK OPTION表示更新视图时要保证在该试图的筛选条件范围之内(可选参数)即:用于阻止通过视图更新或插入不满足视图筛选条件的记录。
当使用WITH CHECK OPTION子句中未显式指定关键字,MySQL默认使用CASCADED规则。
(补充详细说明)

  CASCADED:更新视图时要满足检查语句所在视图以及其依赖的视图的条件(即对视图的数据修改时,要检查当前及所依赖的视图(视图可以依赖另一个视图)是否存在此语句,该语句所在视图及上一个             视图的筛选条件。满足才能修改。

  LOCAL:更新视图时,只要满足该语句所在视图定义的条件即可,但如果其依赖的视图中有CASCADED,也需同时遵守上一个规则。(即要修改只要满足当前视图的条件。)

 (补充LOCAL/CASCADED

视图的记录都保存在information_schema数据库中的一个叫views的表中

1.视图使用时,以表的方式使用

  视图修改

  alter view 视图名 as select ...;

  查看视图的方法包括:DESCRIBE、SHOW TABLE STATUS、SHOW CREATE VIEW(查看视图必须要有SHOW VIEW权限)

DESCRIBE 视图名
SHOW TABLE STATUS LIKE 'stu_class'
SHOW CREATE VIEW stu_class
1.1创建视图:
    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
-- 创建视图
CREATE VIEW stu_class(id,NAME,glass) AS SELECT student.`stuno`,student.`stuname`,stuinfo.`class`
FROM student ,stuinfo WHERE student.`stuno`=stuinfo.`stuno`

2.视图的好处:

   通过id取模存放四个表中,然后通过视图把表合成一张表;

3.视图和表的关系:

   视图是表的投影,表修改了会影响视图的数据,但是视图修改不一定影响表:

   a.当视图和表数据是一一对应的,才会相互影响。比如修改数据;能修改才会相互影响(如果是修改视图中的通过表数据计算得到的数据会修改失败)

   b.视图插入数据时,保证视图和表数据对应外,视图还需要包含表中没有默认值的列,因为会相互影响会在表中插入数据,而没有默认值的列,必须在视图中给出其对应的值。

4.视图的算法(相当于视图的类型)

4.1 merge和temptable实际查询对象也是不一样的一个针对原表,一个是临时表:

5.MYSQL中通过CREATE OR REPLACE VIEW 语句和ALTER语句来修改视图
ALTER OR REPLACE [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
CREATE OR REPLACE VIEW `stu_class` AS 
SELECT
  `student`.`stuno`   AS `id`
FROM (`student` JOIN `stuinfo`)
WHERE (`student`.`stuno` = `stuinfo`.`stuno`)

ALTER语句修改视图:

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

VIEW view_name [(column_list)]

AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

ALTER VIEW  stu_class AS SELECT stuno FROM student;

删除视图使用DROP VIEW语法

DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]

DROP VIEW能够删除1个或多个视图。必须在每个视图上拥有DROP权限

可以使用关键字IF EXISTS来防止因不存在的视图而出错

 

当视图中包含如下内容的时候,视图的更新操作不被执行

(1)视图中关联了基表中被定义为非空的列(因为视图没有这个字段,不能给其赋值)(这条不怎么理解)

(2)定义视图的SELECT语句后的字段列表中使用了数学表达式

(3)定义视图的SELECT语句后的字段列表中使用聚合函数

(4)定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY 、HAVING子句

转载于:https://www.cnblogs.com/straybirds/p/5133997.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一种关系型数据库管理系统,用于存储和管理大量的结构化数据。MySQL数据库概要设计包括几个关键方面。 首先是数据库的命名和创建。在概要设计中,我们需要给数据库命名,并确定它所需的字符集和排序规则。此外,还需要确定数据库的存储引擎,例如InnoDB或MyISAM。 其次,是数据库表的设计。表是MySQL数据库中的基本单位,用于存储数据。在概要设计中,我们需要确定表的名称、字段名称、数据类型和约束。对于每个表,还需要确定主键和外键,用于确保数据的完整性和一致性。 接下来是索引的设计。索引是用于提高查询性能的重要组成部分。在概要设计中,我们需要确定哪些字段需要创建索引,以及选择适当的索引类型,如B树索引或哈希索引。 然后是视图和存储过程的设计。视图是虚拟表,它是基于一个或多个表的查询结果。存储过程是一系列SQL语句的集合,可重复利用。在概要设计中,我们需要确定哪些视图和存储过程是必要的,并定义它们的结构和功能。 最后是数据库的安全性和备份策略的设计。在概要设计中,我们需要确定数据库的用户和权限,以确保只有授权的用户才能访问和修改数据。此外,还需要制定定期备份策略,以保护数据免受意外删除或损坏。 总之,MySQL数据库概要设计涉及命名和创建数据库,设计表和字段,创建索引,定义视图和存储过程,并确保数据库的安全性和备份策略。这些设计决策将在数据库开发和维护过程中起到重要的指导作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值