mysql中的view(虚拟表)

摘要:
mysql支持可更新的视图。1创建CREATE[ORREPLACE]##使用这个选项,若视图已存在,则等图create,若视图不存在,则等同alter[ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}][DEFINER={user|CURRENT_USER}][SQLSECURITY{DEFINER|INVOKER}]VIEWview_name[]ASselect_statement[WITH[CASCADED|LOCAL]CHECKOPTION]注意事项:a在同一个数据库中,视图和表拥有同一个namespace,因此不能有相同的名字。因此information_schema和performance_schema中的表都不能与触发器关联。示例:CREATEVIEWvASSELECTqty,price,qty*priceASvalueFROMt;2查看DESCRIBE视图名;或者:SHOWTABLESTATUSLIKE'视图名';或者:SHOWCREATEVIEW视图名;或者:SELECT*FROMinformation_schema.views;3修改createorreplace语句或者alter语句:ALTER[ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}][DEFINER={user|CURRENT_USER}][SQLSECURITY{DEFINER|INVOKER}]VIEWview_name[]ASselect_statement[WITH[CASCADED|LOCAL]CHECKOPTION]4更新视图为虚拟表,没有数据。在视图中添加,修改,删除数据实际上是在其原始表中进行的。

视图是从一个或多个表/视图中导出来的虚拟表。mysql支持可更新的视图。

1 创建

    CREATE
    [OR REPLACE]  ##使用这个选项,若视图已存在,则等图create,若视图不存在,则等同alter
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

注意事项:
a 在同一个数据库中,视图和表拥有同一个namespace,因此不能有相同的名字。
b select语句中不能含有子查询
c select语句中不能涉及系统变量和用户自定义变量
d 如果有存储过程,函数,定时器等等,select语句中不能有他们的参数
e select中不能有prepared语句的参数
f 创建时所涉及的表和列必须存在,如果后来某些表或者列被删除,使用这个视图时会报错
g 创建时不能涉及临时表,也不能创建‘临时视图’
h 不能关联触发器。 因此information_schema和performance_schema中的表都不能与触发器关联。
i select语句中的别名不能超过列的最大长度(64个字母),而非一般别名最大长度(256字母)。
j 创建时允许在select中添加order by语句,不过如果是从含有order by语句的视图中选取的列,此时添加的order by语句会被自动忽略。
示例:

    CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;

2 查看

    DESCRIBE 视图名;
    或者:
    SHOW TABLE STATUS LIKE '视图名';
    或者:
    SHOW CREATE VIEW 视图名;
    或者:
    SELECT * FROM information_schema.views;

3 修改

    create or replace语句(如1中所言)
    或者alter语句:
    ALTER
        [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        [DEFINER = { user | CURRENT_USER }]
        [SQL SECURITY { DEFINER | INVOKER }]
        VIEW view_name [(column_list)]
        AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]

4 更新

视图为虚拟表,没有数据。在视图中添加,修改,删除数据实际上是在其原始表中进行的。因此视图并不会对性能有太大影响。但是在某些情形下,视图是不能更新的:
a 含有聚合函数
b distinct
c group by
d having
e union 或者union all
f 含有子查询
g 有join等语句(联表查询)
h 涉及其他不可更新视图
i 只含有不含表信息的参数
j ALGORITHM = TEMPTABLE
k 对表中的某行多次引用

5 删除

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

免责声明:文章转载自《mysql中的view(虚拟表)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gvim使用使用ArcGIS GP服务之三发布前的准备下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Socket Connect问题

一、非阻塞Connect对于Select时应注意的问题二、linux客户端socket非阻塞connect编程 一、非阻塞Connect对于Select时应注意的问题 对于面向连接的socket(SOCK_STREAM、SOCK_SEQPACKET),在读写数据之前必须建立连接。 建立连接的过程: 首先,服务器端socket必须在一个客户端知晓的地...

MySql数据库优化、备份和恢复

一、数据库优化 1、为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 优化原则:减少系统瓶颈,减少资源占用,增加系统的反应速度。 2、数据库结构优化 需要考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面的内容。 将...

MySQL的limit分页性能测试加优化

日常我们分页时会用到MySQL的limit字段去处理,那么使用limit时,有什么需要优化的地方吗?我们来做一个试验来看看limit的效率问题:环境:CentOS 6 & MySQL 5.71、建议一个实验表: collect(id[主键], title[varchar], info[text], vtype[tinyint]); Engine:...

图解 SQL 各种连接查询之间的区别

关于sql的join语法 ,有很多种用法,如left,inner等等    假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所示:让我们看看不同JOIN的不同。 1.  INNER JOIN SELECT * FROM TableA  INNER JOIN TableB ON ...

Linux(ubuntu)安装MediaWiki

本篇文档所述步骤,作者完全验证过。一切OK。 作者:http://gaoxingf.blog.51cto.com/612518/188132,Younger Liu 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。 1. 编译安装libxml2 #wget ftp://xmlsoft.org/libxml2/lib...

mysql复杂查询(一)

所谓复杂查询,指涉及多个表、具有嵌套等复杂结构的查询。这里简要介绍典型的几种复杂查询格式。 一、连接查询 连接是区别关系与非关系系统的最重要的标志。通过连接运算符可以实现多个表查询。连接查询主要包括内连接、外连接等。 假设有Student和Grade两个表如下: +-----+--------+-------+ +-----+-----------...