【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语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...
随机推荐
- 新浪微博客户端(17)-集成MJExtension
使用MJExtension框架将字典转换为模型 DJHomeViewController.m /** 载入新的微博数据 */ - (void)loadNewStatues { AFHTTPSessio ...
- linux利用grep查看打印匹配的下几行或前后几行的命令
转自:http://www.itokit.com/2013/0308/74883.html linux系统中,利用grep打印匹配的上下几行 如果在只是想匹配模式的上下几行,grep可以实现. ...
- Sqlserver日期函数应用
1.获取当前时间 SELECT GETDATE() AS '当前日期' , DATENAME(year, GETDATE()) AS '年' , DATENAME(m ...
- The Bottom of a Graph(tarjan + 缩点)
The Bottom of a Graph Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 9139 Accepted: ...
- 在mac上安装nodejs
文章转载自我的个人博客 www.iwangzheng.com node.js最初是2009年发布的,目标是为聊实现事件驱动和非阻塞I/O的web服务器,应用的场景非常的广泛,有web服务器.实时应用 ...
- poj1611(感染病患者)
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 24587 Accepted: 12046 De ...
- 《ASP.NET1200例》当前上下文中不存在名称configurationmanager
当前上下文中不存在名称ConfigurationManager的解决方法 今晚做项目在DBHelper.cs类中的数据库连接要改到web.config里面调用,结果在编译的时候却发现提示错误: 当前上 ...
- gpart 使用笔记
需求 将260G 的/home 分区拆成/home与/data,原/home分区上的数据不用保留,新/home为100G,剩余空间给/data gpart过程 1.df 结果: # Device ...
- springJDBC一对多关系,以及Java递归,jsp递归的实现
maven编译,springMVC+spring+springJDBC框架. 要实现的功能是一个文件夹下,可能显示n个文件夹,每个文件夹下又可能显示n个文件夹.... 前台效果:
- AJAX,JSON用户名校验
效果 开发结构 1,src部分有两个包dao和servlet 1.1dao包下有两个数据库工具类文件 SqlHelper.java package org.guangsoft.dao; import ...