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


      视图

    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 --释放游标

      事务

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

    欢迎转载或分享,如果文章对你有帮助,请给予推荐,欢迎交流及关注!!!
  • 相关阅读:
    LeetCode 72. Edit Distance
    LeetCode 71. Simplify Path
    LeetCode 70. Climbing Stairs
    LeetCode 69. Sqrt(x)
    Ubuntu系统测评
    itchat 爬了爬自己的微信通讯录
    logistic回归模型
    多元线性回归模型
    可乐鸡翅制作难点
    梯度下降算法&线性回归算法
  • 原文地址:https://www.cnblogs.com/dong897812629/p/2981142.html
Copyright © 2020-2023  润新知