视图、索引、存储过程 、触发器、游标及事务

系统 1679 0

  视图

1. 视图不占物理存储空间,它只是一种逻辑对象。可将其看成一个"虚表 "

  视图是一个由select 语句指定,用以检索数据库表中某些行或列数据的语句存储定义

  注:创建视图语句中,不能包括order by、compute或者compute by 子句,也不能出现into关键字

2.创建水平视图

  视图的常见用法是限制用户只能够存取表中的某些数据行,用这种方法产生的视图称为水平视图,即表中行的子集

      
        create
      
      
        view
      
      
         student_view1
        
as
select
* from student

where (class_id = ' 0903 ' )

3.创建投影视图

  如果限制用户只能存取表中的部分列的数据,那么,使用这种方法创建的视图就称为投影视图,即表中列的子集

      
        create
      
      
        view
      
      
         student_view2


      
      
        as
        
select
student_id as ' 学号 ' ,student_name as ' 姓名 ' ,sex as ' 性别 ' from student where sex = 1 with check option /* 强制视图上执行的所有修改语句必须符合由select 语句设置的准则 */

4.创建联合视图

  用户可以生成从多个表中提取数据的联合视图,把查询结果表示为一个单独的"可见表"

  索引

5.索引是数据库的对象之一, 索引是为了加速对表中数据行的检索而创建的一种分散的一种存储结构。

  索引是针对一个表而建立的,它是由数据页面以外的索引页面组成的  

6.索引的分类

  聚簇索引

  数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合排列记录

      
        create
      
      
        unique
      
      
        clustered
      
      
        index
      
       book_id_index
      
        --
      
      
        惟一性聚簇索引
      
      
        on
      
       book(book_id 
      
        asc
      
      
        )




      
      
        with
      
      
        fillfactor
      
      
        =
      
      
        50 /*
        
          填充因子50%*/
        
      
    

  非聚簇索引

      
        create
      
      
        nonclustered
      
      
        index
      
      
         student_course_index




      
      
        on
      
       student_course(student_id 
      
        asc
      
      ,course_id 
      
        asc
      
      
        )




      
      
        with
      
      
        fillfactor
      
      
        =
      
      
        50
      
    

  存储过程

  存储过程是一系列预先编辑好的、能实现特定数据操作功能的 SQL代码集 。它与特定的数据库相关联,存储在SQL Server 服务器上

  存储过程的好处:

   (1)重复使用。存储过程可以重复使用,从而减少数据库开发人员的工作量

   (2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候就不用再编译。一般的SQL语句使用一次就编译一次,所以使用存储过程提高了效率

   (3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此减低了网络传输的运输量

   (4)安全性。参数化的存储过程可以防止SQL注入攻击,而且可以将Grant、Deny、以及Revoke权限应用于存储过程

  定义一个存储过程:

 

      
        create
      
      
        proc
      
      
         spAddStudents

  
      
      
        @name
      
      
        nvarchar
      
      (
      
        50
      
      )
      
        =
      
      
        null
      
      
        as
      
      
        begin
      
      
        transaction
      
      
        --
      
      
        事务
      
      
        insert
      
      
        into
      
      
        [
      
      
        StudentInfo
      
      
        ]
      
      .
      
        [
      
      
        dbo
      
      
        ]
      
      .
      
        [
      
      
        Students
      
      
        ]
      
      
        

  (Name)

  
      
      
        values
      
      
        

  (
      
      
        @name
      
      
        )



  
      
      
        if
      
      
        @@ERROR
      
      
        <>
      
      
        0
      
      
        begin
      
      
        rollback
      
      
        tran
      
      
        return
      
      
        end
      
      
        commit
      
      
        transaction
      
      
        --
      
      
        提交事务
      
    

 创建一个实现加法计算并将运算结果作为输出参数的存储过程

      
        create
      
      
        proc
      
      
         spAdd

  
      
      
        @value1
      
      
        int
      
      
        ,

  
      
      
        @value2
      
      
        int
      
      
        ,

  
      
      
        @result
      
      
        int
      
      
         output

  
      
      
        as
      
      
        select
      
      
        @result
      
      
        =
      
      
        @value1
      
      
        +
      
      
        @value2
      
      
        go
      
    

 执行spAdd存储过程

      
          declare
      
      
        @value1
      
      
        int
      
      
        declare
      
      
        @value2
      
      
        int
      
      
        declare
      
      
        @result
      
      
        int
      
      
        set
      
      
        @value1
      
      
        =
      
      
        1
      
      
        set
      
      
        @value2
      
      
        =
      
      
        1
      
      
        exec
      
       spAdd 
      
        @value1
      
      ,
      
        @value2
      
      ,
      
        @result
      
      
         output

  
      
      
        print
      
      
        convert
      
      (
      
        char
      
      (
      
        5
      
      ),
      
        @value1
      
      ) 
      
        +
      
      
        '
      
      
        +
      
      
        '
      
      
        +
      
      
        convert
      
      (
      
        char
      
      (
      
        5
      
      ),
      
        @value2
      
      ) 
      
        +
      
      
        '
      
      
        =
      
      
        '
      
      
        +
      
      
        convert
      
      (
      
        char
      
      (
      
        5
      
      ),
      
        @result
      
      )
    

  触发器

  触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行update、insert或delete语句时自动触发执行,以防止对数据进行不正确、未授权或不一致的参数

      
        /*
      
      
        创建update触发器
      
      
        */
      
      
        create
      
      
        trigger
      
      
        [
      
      
        dbo
      
      
        ]
      
      .
      
        [
      
      
        TaocanType_update
      
      
        ]
      
      
        on
      
      
        [
      
      
        dbo
      
      
        ]
      
      .
      
        [
      
      
        Table_TaocanType
      
      
        ]
      
      
        for
      
      
        update
      
      
        as
      
      
        update
      
      
        [
      
      
        dbo
      
      
        ]
      
      .
      
        [
      
      
        Table_ChoseTaocanType
      
      
        ]
      
      
        set
      
       Taocan
      
        =
      
      
        inserted.Taocan


      
      
        from
      
      
        [
      
      
        dbo
      
      
        ]
      
      .
      
        [
      
      
        Table_ChoseTaocanType
      
      
        ]
      
       ,inserted 
      
        where
      
      
        [
      
      
        dbo
      
      
        ]
      
      .
      
        [
      
      
        Table_ChoseTaocanType
      
      
        ]
      
      .TaocanId
      
        =
      
      inserted.TaocanId
    

  触发器能够维持两个表间的参照完整性,就像外键一样。外键执行这个任务的效率更高,因为它们在数据改变之前被测试,而不像触发器在数据改变后才触发

  游标

  游标是一种处理数据的方法,为了查看或者处理结果集中的数据,游标提供了在结果集中向前或者向后浏览数据的能力

  (1)创建游标

  (2)打开游标

  (3)读取数据

  (4)数据操作

  (5)关闭和释放游标

      
        declare
      
      
        @taocan
      
      
        nvarchar
      
      (
      
        50
      
      ),
      
        @youhui
      
      
        nvarchar
      
      (
      
        50
      
      
        )
        
declare taocan_cursor scroll cursor -- 声明游标 for select Taocan,youhui from [ 189Shop ] . [ dbo ] . [ Table_TaocanType ] for read only open taocan_cursor -- -打开游标 fetch from taocan_cursor into @taocan , @youhui -- 从游标中提取行 while @@FETCH_STATUS = 0 -- 表示成功完成FETCH 语句 begin print ' 套餐: ' + @taocan + ' ,优惠: ' + @youhui fetch from taocan_cursor into @taocan , @youhui end close taocan_cursor -- 关闭游标 deallocate taocan_cursor -- 释放游标

   事务

  所谓事务,是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元

 

视图、索引、存储过程 、触发器、游标及事务


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论