实习笔记(数据库相关)-2014

 

视图

       视图是虚表,是一组sql语句查询的结果集,没有物理表,所以不能对视图做insert,

Update  delete 操作,在引用视图的时候动态产生数据集。

    

        优点:

1,  就是根据特定的业务需求,定制业务数据

2,  简化操作 特别是多表关联的时候,好的视图可以带来快的开发速度

3,  安全性,给视图设置权限Grant

        缺点:

1,  由于不物理表,当用户需要修改视图关联的各表数据的时候就会很麻烦,特别是数据由有很多表关联出来的情况下。对于这点我也没什么好办法。    

  视图的语法

  

  

 

     

这样就定义了一个名字叫ViewName 的视图,需要使用的话可以用

   Select  *  from  [ViewName]

也可以加上限制条件

   Select  *  from  [ViewName]  as  A  where  A.字段名=条件 

还有的时候我们是需要视图修改一些字段的含义的,例如数据库里的sex 字段你可能

存储的是0,1这种bit 数据,但是你不希望展示给用户的是0,1,这种情况下就有两种解决方法,一种是在展现的时候在代码里转换,一种是在数据库里头转换

Select  A.name,A.sex,(

 Case  A.sex

      When  0  then  ‘男’

      When  1  then  ‘女’

end)  as sexname

from  [tablename]  A

 

 

存储过程

      存储过程, 是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中。存储过程的写法类似高级编程语言。

  

       优点:

  1. 存储过程预习在服务器上编译,代码运行回比T-sql快,下次运行会在内存中找
  2. 存储过程不需要客户端传好多数据过来,减少带宽的消耗
  3. 更好维护,减少代码的修改量
  4. 安全性高,可对存储过程的使用做权限控制,同时传过来的参数会做参数化,一定程度上可以防止注入(没试过,一般要自己过滤掉)

缺点:

1.   可移植性很差

      视图的语法

        Create proc test

        (

               //定义输入输出参数

)

   As

   代码段

   Go

   使用存储过程

      Exec test 参数

 

下面写一个分页的代码段

方式一:(错误的方式,但是很经典)

  

 

 

方式二:正确的写法

  

 

 

使用 exec  getpagedata 1,2

 

另外还有一种有输出参数的

Create  proc  getrowcount(

 @rowcount  int  output

)

 

As

   Select @rowcount=count(*)   from  [Tablename]

 

使用方式

       declare @rowcount int

exec getrowcount @rowcount output

print @rowcount

 

或者

declare @rowcount int

exec getrowcount @rowcount output

select @rowcount as count

 

以上两个存储过程也可以合成一个

 

  

使用方式

declare @count int

exec getpagedata 2,20,@count output

select @count

 

存储过程中经常还有中情况就是查询是有流程控制的,下面是一种简单的流程控制的例子

 

  

 

函数很类似于存储过程,区别于函数可以在select 里使用,而存储过程

不能,下面这张图说明了一些区别(网上找到的)

实习笔记(数据库相关)-2014

 

 

 

     刚实习,写的不是很好,文章也没怎么组织,晚上有时间在调整下。有错误的给个提示,我数据库的环境是MS SQL2005

实习笔记(数据库相关)-2014,布布扣,bubuko.com

实习笔记(数据库相关)-2014

上一篇:photoshop合成制作出天空昏暗的世界末日凄凉场景


下一篇:MongoDB初探-细说索引