【T_SQL】 基础 视图、存储过程、触发器
合作对于我来说,真的很重要,不仅仅是我从中学到了什么技术,更加重要的是我从中学到了如何去协调,如何去处理团队之间的关系,不要误会,我不是组长,但是我们每个人都是组长。在漫长的编译代码的过程中,真的很烦,但是如何我们能够透过代码去学习这些东西,还是很有价值的。
合作的过程中,我负责的编译D层的代码,既然是编译D层,那避免不了和数据库去打交道,简单的SQL语句就不需要再向大家介绍了,而大家更多的人为有点技术含量的的可能就是如何运用“视图”、“触发器”、“存储过程”了,也就是数据库中的企业管理器,非常之强大,但遗憾的是,个人重构的时候,我倒是没有怎么用过触发器和视图,所以,在合作的时候,我决定,一定要用,用之前淡然是学习了。期间,用了几个,感觉真的很方便,最起码,节省代码。
(一)视图1、定义:
在SQL中,外模式一级数据结构的基本单位是视图(view),视图是从若干基本表和(或)其他视图构造出来的表。这种构造方法采用SELECT语句实现。
2、为什么要使用视图:
就拿我们的机房来说,当我们学生上机成功后,界面上需要显示卡的信息和学生的信息(部分或者全部),而且这两张表之间是存在关系的,因为卡和学生的学号是绑定的,依存关系。如果要是以前,我们就会写两个SELECT语句来从两张表里面分别读取所需要的数据,麻烦,费事,烦。现在,我们学习了视图,直接建立一下以这两张表为基本表的视图,一张全新的表(虚表,帮助我们把分布在不同表中的信息搜集整理出一张新表),一切问题都解决了,再多的表(有依存关系或者说是一对一关系),我们一个视图搞定。而且创建一个视图实际就是编写Seclect语句。
3、使用视图有什么好处?又有什么缺点
优点:
一,视图着重于特定数据。
视图可以让用户或者程序开发人员只看到他们所需要的数据,而不需要把表中的所有信息与字段暴露出来,这样增强了数据的安全性。
二,简化数据的操作,易维护。
我们可以将经常用到的多表联合查询出来的数据,或特定的结果集定义为视图,这样就起到了模块化数据的作用。我们在使用这些数据时直接查询该视图就可以,而不用到处写长长的SQL语句,这样也起到易维护的作用。
三,视图可以限定查询数据。
比如:对于不同的用户,我们只提供部分数据给他。这样,我们就可以在视图中限定结果集,然后返回该视图给他。这样,无论用户怎么对视图定义查询条件,他也不能查询出我们不想提供给他的数据。
缺点:
虽然视图可以给我们带来种种便利,但不意味着我们就可以滥用它。因为视图其实就是一段SQL语句,所以它的结果都是每次调用时动态生成的。如果不合理的定义视图,必然带来性能上的损耗。下面是我们在创建视图应该要注意的几点:一,操作视图会比直接操作基础表要慢,所以我们尽量避免在大型表上创建视图。二,尽量不要创建嵌套视图,就是在视图中使用视图。 这样在查询时,会多次重复访问基础表,带来性能损耗。三,尽量在视图只返回所需的信息,尽量不要在视图使用不需要访问的表。四,在大型表或者复杂定义的视图,可以使用存储过程代替。五,频繁使用的视图,可以使用索引视图来代替。
4、注意点:有的人说视图只能用来读取数据,其实,视图上也可以进行增删改的操作,但是前提:只能影响一张基本表5、视图的创建和撤销
创建:1、语句创建:新建查询:
create view V_Card_Stu --要创建的视图名as select T_card.cardNo ,T_card.head,T_Student.studentNo,T_Student.studentName --要选择的字段from T_Card,T_Student --基本表where T_card.studentNo=T_Student.studentNo --关系
2、手动创建:+
确定,就好了,记得保存
至于撤销,方法一,删除视图就可以,方法二,Drop view +视图名称就O了
(二)触发器
1、定义:
触发器是SQL Server提供给程序员和数据分析员来保证数据完整性的一种方法,他是与表事件相关的特殊的存储过程,触发器不能被直接执行,它们只能为表上的Insert、Update和Delete事件所触发,此外也不能够传递或接受参数。
2、怎么用?
触发器不能被直接执行,它们只能为表上的Insert、Update和Delete事件所触发,此外也不能够传递或接受参数。每个表下都有触发器这一项,所以,只要在触发器上右击创建新触发器就可以了
3、在哪儿用?
应用到我们的机房上就是,当我们退卡成功的时候,我们的退卡表里面有添加(insert),而同时,我们的卡表里面要删掉对应的卡信息(delete),我们的学生表里面也要删掉相应的学生信息(delete),那这就是一个很直观的例子:
但是语句创建的时候不用这么写的:对应起来就哦了
4、注意点:
以前只知道三种触发事件,insert,update,delete,但是不知道update如何取旧数据,现在知道了,当时update触发器的时候,inserted为新数据表,deleted为旧数据表
(三)存储过程
1、定义:
存储过程是存放在服务器上的预先编译好的SQL语句,在第一次执行时进行语句检查和编译,编译好的存储过程在高速缓存中用于后续调用,这样就可以使存储过程执行时更加迅速,更加高效。存储过程可以带有输入和输出的参数。
2、优点
主要有提供了安全机制,改进了执行性能,减少了网络流量和增强了代码的重用性,执行速度快。
3、 缺点:
1、SQL本身是一种结构化查询语言,加上了一些控制(赋值、循环和异常处理等),但不是OO的,本质上还是过程化的,面对复杂的业务逻辑,过程化的处理会很吃力。这一点算致命伤。2、不便于调试。基本上没有较好的调试器,很多时候是用print来调试,但用这种方法调试长达数百行的存储过程简直是噩梦。好吧,这一点不算啥,C#/java一样能写出噩梦般的代码。
3、没办法应用缓存。虽然有全局临时表之类的方法可以做缓存,但同样加重了数据库的负担。如果缓存并发严重,经常要加锁,那效率实在堪忧。
4、怎么用?在哪用?
存储过程大家都很熟悉了,机房里面应用最多的就是我们的组合查询,其实在注册的时候也可以用的,也很方便的
图片不是我的,但是真的很清晰的,一目了然
总结:
三种利器,很大方面的方便了我们的代码编译,给我们的合作解决了不少问题,同时也提出很多问题,这时刻警醒我们学习之路还很长。对于这三种企业管理器,从最初的陌生到现在的熟练运用,这就是学习。老师说过,什么东西都有两面性,有利就有弊,所以,适合才是最好
【T_SQL】 基础 视图、存储过程、触发器的更多相关文章
- MySQL笔记---视图,存储过程, 触发器的使用入门
		
大二学数据库的时候,只是隐约听到老师提起过视图啊,存储过程啊,触发器啊什么的,但只是淡淡的记住了名字,后来自己做些小项目,小程序,也没有用上过,都只是简单的建表,关联表之类的,导致我对这些东西的理解只 ...
 - Oracle-序列-存储过程-视图-索引-触发器
		
课程介绍 1. 约束(掌握) 2. 序列(掌握) 3. 索引(掌握) 4. 视图(掌握) 5. 存储过程(掌握) 6. 自定义函数(掌握) 7. 触发器(掌握) 数据库对象的命名规则 1.对象名称必须 ...
 - 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器
		
@ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...
 - MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能
		
一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...
 - MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
		
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
 - MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
		
浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...
 - MySQL之视图、触发器、事务、存储过程、函数   流程控制
		
MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...
 - SQL学习笔记七之MySQL视图、触发器、事务、存储过程、函数
		
阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...
 - mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数
		
mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...
 
随机推荐
- 下载安装resin-3.X服务器并配置到myeclipse
			
前提是先安装jdk,具体自己安装. 1.到resin官网http://www.caucho.com/download/下载相应压缩包,比如resin-3.2.0.zip 2.解压下载的resin-3. ...
 - 详述Linux ftp命令的使用方法
			
转自:http://os.51cto.com/art/201003/186325.htm ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里 ...
 - To the Max
			
To the Max --------------------------------------------------------------------------------Time Limi ...
 - IOS项目删除Git
			
默认创建工程会在MAC上面创建Git版本管理, 但是呢, 我现在想上传到svn服务器进行管理, 但是已经有个git 好像上传不了 只有把Git删了才能继续. 连问带查, 终于找到解决方案 把 .git ...
 - MyEclipse安装JS代码提示(Spket插件)
			
近期需要大量使用JS来开发,但是MyEclipse2014自带的JS编辑器没有代码提示的功能,开发效率有点低,所以安装了一个Spket的插件,过程非常简单,SVN插件的安装比这个更简单. Spket插 ...
 - 三款SDR平台对比:HackRF,bladeRF和USRP
			
这篇文章是Taylor Killian今年8月发表在自己的博客上的.他对比了三款平价的SDR平台,认为这三款产品将是未来一年中最受欢迎的SDR平台.我觉得这篇文章很有参考价值,简单翻译一份转过来.原文 ...
 - 九度 OJ1008  hdu 3790
			
#include<stdio.h> #include<string.h> struct node { int d; int p; }g[][]; #define inf 0x3 ...
 - Tornaod框架
			
Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效 ...
 - 又一款linux提权辅助工具
			
又一款linux提权辅助工具 – Linux_Exploit_Suggester 2013-09-06 10:34 1455人阅读 评论(0) 收藏 举报 https://github.com/Pen ...
 - Objective-C中的instancetype和id区别
			
目录(?)[-] 有一个相同两个不同相同 Written by Mattt Thompson on Dec 10th 2012 一什么是instancetype 二关联返回类型related resu ...
 
			
		


