【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语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...
随机推荐
- IE7下,input元素相对父级元素错位解决办法
原因: 当input仅仅包含父元素,父元素拥有margin属性时,IE7的input就会错误的继承margin属性. 解决办法: 给input元素外面套一个span,label这样的内联元素,这样就会 ...
- jQuery1.11源码分析(8)-----jQuery调用Sizzle引擎的相关API
之所以把这部分放在这里,是因为这里用到了一些基本API,前一篇介绍过后才能使用. //jQuery通过find方法调用Sizzle引擎 //jQuery通过find方法调用Sizzle引擎 jQuer ...
- javascript判断上传文件大小
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 如何看K线图基础知识
在日K线图中一般白线.黄线.紫线.绿线依次分别表示:5.10.20.60日移动平均线,但这并不是固定的,会根据设置的不同而不同,比如你也可以在系统里把它们设为5.15.30.60均线. 你看K线图的上 ...
- php面试题之二——数据结构和算法(高级部分)
二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator接口)(腾讯) <?php class T ...
- quaternion*Vector3的新理解
原地址:http://www.cnblogs.com/88999660/p/3262656.html using UnityEngine; using System.Collections; publ ...
- iOS团队开发者测试
那么你需要在你下载证书的那个电脑上从钥匙串-->选择证书-->右键到处证书,保存为.p12的证书,以后这个证书拷贝到任何电脑上去都是可以使用的! 本来只有一台电脑可以测试, 现在要团队开发 ...
- php中global与$GLOBALS的用法及区别-转载
php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...
- linux 系统下查看raid信息,以及磁盘信息
有时想知道服务器上有几块磁盘,如果没有做raid,则可以简单使用fdisk -l 就可以看到. 但是做了raid呢,这样就看不出来了.那么如何查看服务器上做了raid? 软件raid:只能通过Lin ...
- AWS AutoScaling
origin_from: http://blog.csdn.net/libing_thinking/article/details/48327189 AutoScaling 是 AWS 比较核心的一个 ...



