热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

如何在网店数据库中使用视图

如何在网店数据库中使用视图视图(View)的本质,就是将SELECT语句的检索结果用表的形式保存下来,因此,视图也被称为:假表、伪表。www.2cto.com视图,将多个物理表中的数据,动态地组织在一起,用户可...SyntaxHighlighter.all();
如何在网店数据库中使用视图
 
视图(View)的本质,就是将 SELECT  语句的检索结果用表的形式保存下来,因此,视图也被称为:假表、伪表。  www.2cto.com  
视图,将多个物理表中的数据,动态地组织在一起,用户可以像使用物理表那样使用它。
 
视图的作用:
 
1、可以公开表中特定的行或列。
通过限制用户对实际表的 SELECT 操作权限,而仅仅赋予用户对相应视图的 SELECT 操作权限,
来达到限制用户只能读取特定行或列的目的。
 
2、简化复杂的 SQL 语句
 
3、可以限制可插入/ 更新的 范围。使用 WITH CHECK POINT
 
[sql] 
CREATE VIEW v_order(  
oid, odate, memo, uid, zip, address, name, pid, pname, price, quantity) AS   
SELECT   
ob.oid, ob.odate, ob.memo,   
u.uid, u.zip, u.address, u.name,  
p.pid, p.pname, p.price,   
od.quantity   
FROM   
(   
(   
( order_basic AS ob INNER JOIN order_detail AS od ON ob.oid = od.oid )   
INNER JOIN product AS p ON od.pid = p.pid   
)   
INNER JOIN user AS u ON ob.uid = u.uid   
);  
 
 
[sql] 
CREATE OR REPLACE VIEW v_order  
AS SELECT   
ob.oid AS oid,   
ob.odate AS odate,   
ob.memo AS memo,   
u.uid AS uid,  
u.zip AS zip,   
u.address AS address,   
u.name AS name,  
p.pid AS pid,   
p.pname AS pname,   
p.price AS price,   
od.quantity AS quantity  
FROM   
(   
(   
( order_basic AS ob INNER JOIN order_detail AS od ON ob.oid = od.oid )   
INNER JOIN product AS p ON od.pid = p.pid   
)   
INNER JOIN user AS u ON ob.uid = u.uid   
);  
 
[sql] 
DROP VIEW v_order;  
 
 
[sql] 
SHOW TABLES;  
SHOW TABLES LIKE 'v\_%';  
SHOW FIELDS FROM v_order;  
 
在视图中,进行检索
[sql] 
SELECT * FROM v_order WHERE oid = 'D00001'\G  
UPDATE product SET pname = '灯罩' WHERE pid = 'P0002';  
COMMIT;  
 
视图,不是真正地保存数据,而只是将数据组织在一起的一种形式。
使用视图,进行变更数据(INSERT / UPDATE / DELETE)时,以下情况,会导致操作失败:
1、视图中的列,含有统计函数
2、视图定义时,使用了 GROUP BY / HAVING 语句,DISTINCT 语句,UNION 语句
3、视图定义时,使用了子查询
4、跨越多个基础表,进行数据变更
 
 
创建视图时,使用 WITH CHECK OPTION 命令
[sql] 
CREATE VIEW v_product3000up AS SELECT * FROM product WHERE price >= 3000 WITH CHECK OPTION;  
此时,如果,对 视图 v_product3000up 插入的记录中 price <3000, 那么会插入失败
 
 
视图,是一个方便的功能,但是,就性能而言,不是一个最好的选择。
它能简化复杂的 SELECT 语句,但是,不意味着简化了内部的处理过程。
慎重使用!
 

推荐阅读
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 探讨在使用 PL/SQL Developer 12.0 的数据生成器时遇到的中文乱码问题及其解决方案。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • 本文详细介绍了PostgreSQL与MySQL在SQL语法上的主要区别,包括如何使用COALESCE替代IFNULL、金额格式化的方法、别名处理以及日期处理等关键点。 ... [详细]
  • 本文详细介绍了在 Ubuntu 16.04 系统上安装和配置 PostgreSQL 数据库的方法,包括如何设置监听地址、启用密码加密、更改默认用户密码以及调整客户端访问控制。 ... [详细]
  • 本文作为《WM平台上使用Sybase Anywhere 11》系列的第二篇,将继续探讨在Windows Mobile (WM) 系统中如何高效地操作Sybase Anywhere 11数据库。继上一篇关于安装与基本测试的文章之后,本篇将深入讲解数据库的具体操作方法。 ... [详细]
  • 本文探讨了在SQL Server中处理几何类型列时遇到的INTERSECT操作限制,并提供了解决方案,包括通过转换数据类型和使用额外表结构的方法。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文记录了在Windows 8.1系统环境下,使用IIS 8.5和Visual Studio 2013部署Orchard 1.7.2过程中遇到的问题及解决方案,包括503服务不可用错误和web.config配置错误。 ... [详细]
  • 在处理大量联系人数据的批量插入操作时,发现现有方法的执行效率低下,尤其是在处理数十条记录以上时,与导出操作的速度形成鲜明对比。本文将探讨如何通过代码优化来提升批量插入联系人的效率。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
author-avatar
蓝色水气球_453
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有