mysql视图

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">      视图是一种虚拟的表,是从数据库中一个或者多个表中导出来的表。还可以从已经存在的视图的基础上定义。数据库中只存放了视图的定义,并没有存放视图的数据。</span>

使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。视图是依赖于原来的表中的数据的。

        如果要经常从多个表查询指定字段的数据,可以在这些中上建立一个视图。通过视图显示这些字段的数据。如果修改了与视图相关的字段名称,要修改视图。

mysql的视图不支持输入参数的功能,在交互性上还有欠缺。对于变化不大的操作,会简化用户操作。

 视图的作用:

1、使操作简单化

       视图需要达到的目的就是所见即所需。可以为经常使用的查询定义一个视图,使用者不必为同样的查询操作指定条件。

2、增加数据的安全性

       通过视图,用户只能查询和修改指定的数据,数据库的授权命令可以限制用户的操作权限,但不能限制到特定的行列上。使用视图,可以方便的将用户的权限限制到特定的行和列上。可以保证敏感信息不会被没有权限的人看到,保证一些机密信息的安全。使用视图时,用户接触不到真实的表名和字段名称,保证安全。

3、提高表的逻辑独立性

        可以屏蔽原有表结构变化带来的影响。如增加删除未引用的列,对视图不回造成影响。


algorithm子句:可选的ALGORITHM子句是对标准SQL的MySQL扩展,规定了MySQL的算法,算法会影响MySQL处理视图的方式。ALGORITHM可取3个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,默认算法是UNDEFINED(未定义的)。指定了MERGE选项,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。MERGE算法要求视图中的行和基表中的行具有一对一的关系,如果不具有该关系,必须使用临时表取而代之。指定了TEMPTABLE选项,视图的结果将被置于临时表中,然后使用它执行语句。

column_list要想为视图的列定义明确的名称,可使用可选的column_list子句,列出由逗号隔开的列名。column_list中的名称数目必须等于SELECT语句检索的列数。若使用与源表或视图中相同的列名时可以省略column_list。

select_statement用来创建视图的SELECT语句,可在SELECT语句中查询多个表或视图。但对SELECT语句有以下的限制:

(1)定义视图的用户必须对所参照的表或视图有查询(即可执行SELECT语句)权限;

(2)不能包含FROM子句中的子查询

(3)不能引用系统或用户变量;

(4)不能引用预处理语句参数;

(5)在定义中引用的表或视图必须存在;

(6)若引用不是当前数据库的表或视图时,要在表或视图前加上数据库的名称;

(7)在视图定义中允许使用ORDER BY,但是,如果从特定视图进行了选择,而该视图使用了具有自己ORDER BY的语句,则视图定义中的ORDER BY将被忽略。

(8)对于SELECT语句中的其他选项或子句,若视图中也包含了这些选项,则效果未定义。例如,如果在视图定义中包含LIMIT子句,而SELECT语句使用了自己的LIMIT子句,MySQL对使用哪个LIMIT未做定义。

 WITH CHECK OPTION指出在可更新视图上所进行的修改都要符合select_statement所指定的限制条件,这样可以确保数据修改后,仍可通过视图看到修改的数据。当视图是根据另一个视图定义的时,WITH CHECK OPTION给出两个参数:LOCAL和CASCADED。它们决定了检查测试的范围。Local关键字使CHECK OPTION只对定义的视图进行检查,cascaded则会对所有视图进行检查。如果未给定任一关键字,默认值为CASCADED

查看视图:

DESCRIBE 视图名;

SHOW  CREATE VIEW  视图名;

所有的视图表都是存在information_schema数据库中的views表

修改视图:

CREATE  or replace 。。。。

or replace给定了OR REPLACE子句,语句能够替换已有的同名视图

ALTER VIEW  viewname.....

更新视图:

修改视图的时候,都是转移到基本表来更新。不能更新的情况

1、视图中包含SUM、COUNT、MAX、MIN 等函数的view是不能更新的

2、包含UNION、UNION ALL、DISTINCT、GROUP BY、HAVING等关键字的不能更新

3、常量视图不能更新

4、SELECT中包含子查询的不能更新

5、由不可更新的视图导出的视图不能更新

6、创建视图的时候,算法为TEMPTABLE的视图不能更新

7、视图对应的表上存在没有默认值的列,且该列没有存在视图中的view不能更新。

删除视图

DROP VIEW [IF EXISTS] viewname


SQL知识,从两个表中选择数据

1、引用两个表

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

2、SQL JOIN - 使用 Join

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值