`

mysql视图创建注意事项

阅读更多

一. 视图概述

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

二. 创建视图——CREATE VIEW

1. 语法

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW [db_name.]view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
通过该语句可以创建视图,若给定了[OR REPLACE],则表示当已具有同名的视图时,将覆盖原视图。select_statement是一个查询语句,这个查询语句可从表或其它的视图中查询。视图属于数据库,因此需要指定数据库的名称,若未指定时,表示在当前的数据库创建新视图。

表和数据库共享数据库中相同的名称空间,因此,数据库不能包含相同名称的表和视图,并且,视图的列名也不能重复。

2. 使用举例

Eg. 本例创建一个产品表(product)和一个购买记录表(purchase),再通过视图purchase_detail查询出购买的详细信息。

CREATE TABLE product

(

product_id INT NOT NULL,

name VARCHAR(50) NOT NULL,

price DOUBLE NOT NULL

);

INSERT INTO product VALUES(1, ‘apple ‘, 5.5);

CREATE TABLE purchase

(

id INT NOT NULL,

product_id INT NOT NULL,

qty INT NOT NULL DEFAULT 0,

gen_time DATETIME NOT NULL

);

INSERT INTO purchase VALUES(1, 1, 10, NOW());

CREATE VIEW purchase_detail AS SELECT product.name as name, product .price as price, purchase.qty as qty, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

创建成功后,输入:SELECT * FROM purchase_detail;

运行效果如下:

+——-+——-+—–+————-+

| name | price | qty | total_value |

+——-+——-+—–+————-+

| apple | 5.5 | 10 | 55 |

+——-+——-+—–+————-+

1 row in set (0.01 sec)

3. 注意事项

创建视图存在如下注意事项:

(1) 运行创建视图的语句需要用户具有创建视图(CRATE VIEW)的权限,若加了[OR REPLACE]时,还需要用户具有删除视图(DROP VIEW)的权限;

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

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

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

(5) 在存储子程序内,定义不能引用子程序参数或局部变量;

(6) 在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用CHECK TABLE语句;

(7) 在定义中不能引用TEMPORARY表,不能创建TEMPORARY视图;

(8) 在视图定义中命名的表必须已存在;

(9) 不能将触发程序与视图关联在一起;

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

三. 修改视图——ALTER VIEW

1. 语法

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
该语句用于更改已有视图的定义。其语法与CREATE VIEW类似。

2. 使用举例

Eg. 将上一小节中中创建的视purchase_detail进行修改,去掉qty列,语句如下:

ALTER VIEW purchase_detail AS SELECT product.name as name, product .price as price, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

此时通过语句:select * from purchase_detail;对视图进行查询时,结果如下:

+——-+——-+————-+

| name | price | total_value |

+——-+——-+————-+

| apple | 5.5 | 55 |

+——-+——-+————-+

3. 注意事项

修改视图的注意事项除了第一条外跟创建视图的注意事项是一样的。第(1)条应改为:

该语句需要具有针对视图的CREATE VIEW和DROP权限,也需要针对SELECT语句中引用的每一列的某些权限。

四. 删除视图——DROP VIEW

1. 语法

DROP VIEW [IF EXISTS]
view_name [, view_name] …
[RESTRICT | CASCADE]
该语句用户删除视图,可一次删除多个视图。[IF EXISTS]选项确保语句正确运行。若没有该子句,当指定的视图不存在时,将发生错误。

2. 使用举例

Eg1. 删除在前面的小节中创建的视图purchase_detail:DROP VIEW purchase_detail;

Eg2. 删除一个未知的视图:DROP VIEW IF EXISTS test_view;

Eg3. 删除多个视图:DROP VIEW IF EXISTS test_view1, test_view2;

3. 注意事项

必须对要删除的一个或多个视图拥有DROP VIEW的权限

分享到:
评论

相关推荐

    在Navicat中创建MySQL动态视图的方法

    #### 注意事项 - **安全性**:通过视图,您可以限制用户对敏感数据的访问。确保只授予用户对视图的访问权限,而不是直接访问基础表。 - **性能考虑**:虽然动态视图非常有用,但过多地使用它们可能会降低查询性能。...

    mysql视图简介.pdf

    ### MySQL视图详解 #### 一、视图概述 视图是MySQL中一种重要的功能,它为用户提供了灵活的数据访问方式。简而言之,视图是一个虚拟表,其内容由一条SELECT语句定义。尽管视图看起来像是一个独立的表,但实际上它...

    mysql存储过程与视图(存储过程语法介绍、MySQL视图用法、注意事项)..docx

    #### 二、MySQL视图 ##### 1、基本概念 视图是一种虚拟表,它不实际存储数据,而是根据定义的查询从一个或多个实际表中动态获取数据。视图的主要用途之一是提高数据的安全性,通过限制用户对敏感数据的访问,仅展示...

    通过MSQL通过视图访问ORACLE中的表

    5. **注意事项**:跨数据库操作需要注意性能问题,因为每次对视图的操作都会触发与Oracle的网络通信。因此,视图的设计应尽可能减少数据传输量和提高查询效率。 6. **安全性**:确保在配置数据源和编写SQL语句时,...

    mysql学习笔记MYSQL使用注意事项

    在学习MySQL的过程中,了解一些使用注意事项至关重要,这有助于确保数据库的安全性和高效性。以下是一些关于MySQL使用的关键点: 1. **启动和停止MySQL服务**: 在Windows NT操作系统上,你可以通过命令行来控制...

    oracl转mysql注意事项

    ### Oracle转MySQL注意事项详解 #### 一、概述 在企业级应用中,有时需要将现有的Oracle数据库迁移到MySQL,这不仅涉及到技术上的挑战,还可能影响到整个系统的稳定性和性能。本文档旨在提供一个全面的指南,帮助...

    mysql的介绍及安装注意事项.zip

    本教程将详细介绍MySQL的基本概念、功能以及安装过程中的注意事项。 一、MySQL基本介绍 MySQL的核心特性包括支持ACID(原子性、一致性、隔离性和持久性)事务、多种存储引擎(如InnoDB用于事务处理,MyISAM用于快速...

    Oracle与MySQL在数据库视图支持上的比较与实践

    数据库视图是数据库中一个非常重要的概念,它提供了一种虚拟表的概念,使得用户可以...通过本文的介绍,相信读者已经掌握了在Oracle和MySQL中创建和执行视图的基本方法,以及它们在实际应用中的一些差异和注意事项。

    数据库系统及原理及MYSQL应用教程视图实验报告

    实验还强调了在创建和使用视图时应注意的一些限制和注意事项,如: - 用户需要相应的权限(create view、drop view)。 - 视图定义不能包含子查询、系统或用户变量、预处理语句参数。 - 不能在存储子程序内引用子...

    MYSQL

    4.6.1 Linux RPM注意事项 4.6.2 构造客户程序 4.6.3 系统特定的问题 4.6.3.1 Linux 注意事项 4.6.3.2 HP-UX 注意事项 4.7 安装 MySQL源代码分发 4.7.1 快速安装概述 4.7.2 运用补丁...

    mysql 教程-创建数据库.pdf

    创建数据库的注意事项 在创建数据库时,需要注意以下几点: * 需要有足够的权限来创建数据库,否则会出现错误。 * 创建数据库时,可以指定数据库的字符集和排序规则。 * 如果数据库已经存在,可能会出现错误,需要...

    MySQL中文参考手册.chm

    4.6.2 构造客户程序 4.6.3 系统特定的问题 4.6.3.1 Linux 注意事项 4.6.3.2 HP-UX 注意事项 4.7 安装 MySQL源代码分发 4.7.1 快速安装概述 4.7.2 运用补丁 4.7.3 典型的...

    mySql数据库相关资料大全(入门,常用函数大全、语句注意事项、技术等).rar

    这份名为"mySql数据库相关资料大全(入门,常用函数大全、语句注意事项、技术等).rar"的压缩包提供了全面的学习资源,涵盖了从初学者到高级用户的各个阶段。 1. **SQL语句的注意事项.docx**: 这份文档可能包含...

    MySQL中文参考手册

    + 4.11.5 Linux (所有的Linux版本)注意事项 # 4.11.5.1 Linux-x86 注意事项 # 4.11.5.2 RedHat 5.0 注意事项 # 4.11.5.3 RedHat 5.1 注意事项 # 4.11.5.4 Linux-SPARC 注意事项 # 4.11.5.5 Linux-Alpha 注意...

    跨服务器建立视图sql

    #### 六、注意事项 - 在设置远程服务器访问权限时,需要注意安全性和性能问题。 - 使用 OpenRowSet() 或链接服务器查询远程数据时,可能会因为网络延迟而影响性能。 - 对于复杂的跨服务器查询,建议优化查询语句,...

    Oracle到mysql的迁移步骤及各种注意事项_数据库.docx

    8. **其他注意事项**: - 检查表结构、索引、视图、触发器等其他数据库对象,确保它们能在MySQL中正确创建和工作。 - 数据类型兼容性和大小限制需要仔细检查,因为不同数据库系统有不同的限制。 - 考虑性能和并发...

    详细分析mysql视图的原理及使用方法

    4. 视图的限制与注意事项 - 不支持所有类型的DML操作,如`INSERT`、`UPDATE`和`DELETE`可能受到限制,取决于基础表和视图的定义。 - 视图无法包含`ORDER BY`和`LIMIT`子句,除非使用`WITH READ ONLY`选项创建。 -...

    Oracle向MySQL_迁移相关事项

    在Oracle中创建存储过程的CREATE OR REPLACE语句在MySQL中需要调整,赋值语句也有所改变。例如,Oracle的赋值操作符":"在MySQL中变为"="。 四、任务(Job)的移植 Oracle的Job对应MySQL的Event,用于实现定时任务。...

    MySQL 视图的基础操作(五)

    4. 使用视图的注意事项: - **权限管理**:创建视图时需要有`CREATE VIEW`权限,并确保对引用的表有读取权限。 - **命名规范**:视图的命名通常遵循`view_xxx`或`v_xxx`的格式,以便识别。 - **更新规则**:当...

Global site tag (gtag.js) - Google Analytics