合作对于我来说,真的很重要,不仅仅是我从中学到了什么技术,更加重要的是我从中学到了如何去协调,如何去处理团队之间的关系,不要误会,我不是组长,但是我们每个人都是组长。在漫长的编译代码的过程中,真的很烦,但是如何我们能够透过代码去学习这些东西,还是很有价值的。


        合作的过程中,我负责的编译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】 基础 视图、存储过程、触发器的更多相关文章

  1. MySQL笔记---视图,存储过程, 触发器的使用入门

    大二学数据库的时候,只是隐约听到老师提起过视图啊,存储过程啊,触发器啊什么的,但只是淡淡的记住了名字,后来自己做些小项目,小程序,也没有用上过,都只是简单的建表,关联表之类的,导致我对这些东西的理解只 ...

  2. Oracle-序列-存储过程-视图-索引-触发器

    课程介绍 1. 约束(掌握) 2. 序列(掌握) 3. 索引(掌握) 4. 视图(掌握) 5. 存储过程(掌握) 6. 自定义函数(掌握) 7. 触发器(掌握) 数据库对象的命名规则 1.对象名称必须 ...

  3. 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器

    @ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...

  4. MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能

    一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...

  5. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  6. MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    浏览目录: 1.视图 2.触发器 3.存储过程 4.函数 5.事物 6.数据库锁 7.数据库备份 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视 ...

  7. MySQL之视图、触发器、事务、存储过程、函数 流程控制

    MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...

  8. SQL学习笔记七之MySQL视图、触发器、事务、存储过程、函数

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...

  9. mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数

    mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...

随机推荐

  1. IE7下,input元素相对父级元素错位解决办法

    原因: 当input仅仅包含父元素,父元素拥有margin属性时,IE7的input就会错误的继承margin属性. 解决办法: 给input元素外面套一个span,label这样的内联元素,这样就会 ...

  2. jQuery1.11源码分析(8)-----jQuery调用Sizzle引擎的相关API

    之所以把这部分放在这里,是因为这里用到了一些基本API,前一篇介绍过后才能使用. //jQuery通过find方法调用Sizzle引擎 //jQuery通过find方法调用Sizzle引擎 jQuer ...

  3. javascript判断上传文件大小

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 如何看K线图基础知识

    在日K线图中一般白线.黄线.紫线.绿线依次分别表示:5.10.20.60日移动平均线,但这并不是固定的,会根据设置的不同而不同,比如你也可以在系统里把它们设为5.15.30.60均线. 你看K线图的上 ...

  5. php面试题之二——数据结构和算法(高级部分)

    二.数据结构和算法 1.使对象可以像数组一样进行foreach循环,要求属性必须是私有.(Iterator模式的PHP5实现,写一类实现Iterator接口)(腾讯) <?php class T ...

  6. quaternion*Vector3的新理解

    原地址:http://www.cnblogs.com/88999660/p/3262656.html using UnityEngine; using System.Collections; publ ...

  7. iOS团队开发者测试

    那么你需要在你下载证书的那个电脑上从钥匙串-->选择证书-->右键到处证书,保存为.p12的证书,以后这个证书拷贝到任何电脑上去都是可以使用的! 本来只有一台电脑可以测试, 现在要团队开发 ...

  8. php中global与$GLOBALS的用法及区别-转载

    php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...

  9. linux 系统下查看raid信息,以及磁盘信息

    有时想知道服务器上有几块磁盘,如果没有做raid,则可以简单使用fdisk -l  就可以看到. 但是做了raid呢,这样就看不出来了.那么如何查看服务器上做了raid? 软件raid:只能通过Lin ...

  10. AWS AutoScaling

    origin_from: http://blog.csdn.net/libing_thinking/article/details/48327189 AutoScaling 是 AWS 比较核心的一个 ...