• 事务,视图及索引



    01.事务

       什么是事务

      解析:事务是一个不可分割的整体,事务中的多个执行过程,同生共死。要么都执行成功, 要么都执行失败。 

    事务的四个特性?

          (1)原子性(Atomicity )

       (2)一致性( Consistency ) 

       (3)隔离性( Isolation) :两个事务之间 

       (4)永久性(Durabilily)

    简称:ACID 原则

    事务的执行语法是:

      开始事务:BEGIN  TRANSACTION 

        分析:显示的标志一个事务的起始点

      提交事务:COMMIT TRANSATION

        解析:标志着一个事务的成功结束,自事务开始提交语句之间的执行的所有数据更新将永久的保存在数据库数据文件中,并释放连接时占用的资源

      回滚(撤销)事务:ROLLBACK RANSACTION

        解析:清除自事务起点之该语句所做的所有数据更新操作,将数据状态回滚到事务开始前,并释放由事务控制的资源

    例如:

    如下面代码:

      

     在back表里添加两条数据,增加一个检查约束,相应的进行转账。

    :张三給李四转账,如果出现错误回滚到事务的初始状态。

    事务的三种类型:

      显示事务:用BEGIN TRANSACTION 明确事务的开始。

      隐式事务:通过设置Set IMPLICIT-TRANSACTION ON 语句,将隐式事务模式设置为打开。

      自动提交事务:SQL Server的默认模式,将每条单独的T-SQL语句视为一个事务,如果成功执行,则自动提交,反之相反。


    02.视图

      视图是保存在数据库中的select查询

      什么是视图

           (1).视图是另一种查看数据库中一个或多个表中数据的方法。

      (2).视图是一种虚拟表,通常是作为来自一个或多个表的行或列的子集创建的。

      视图的优缺点:

      

    如何创建视图:(view关键字)

        Create view VW_StuInfo

        As

        Select * from student

        Select * from VW_StuInfo


    03.索引 

      索引:是SQL Server编排数据的内部方法。它为SQL Server提供一种方法来编排查询数据 

      索引的弊端是会降低增删改效率

       索引的分类

    • 有3种索引类型:聚集索引、非聚集索引和唯一索引。如果表中存在聚集索引,则非聚集索引使用聚集索引来加快数据查询。
    • <1>.聚集索引
    • 聚集索引会对表和视图进行物理排序,所以这种索引对查询非常有效,在表和视图中只能有一个聚集索引。当建立主键约束时,如果表中没有聚集索引,SQL Server会用主键列作为聚集索引键。可以在表的任何列或列的组合上建立索引,实际应用中一般定义成主键约束的列建立聚集索引。
    • <2>.非聚集索引
    • 非聚集索引不会对表和视图进行物理排序。如果表中不存在聚集索引,则表示未排序的。在表或视图中,最多可以建立250个非聚集索引,或者249个非聚集索引和1个聚集索引。
    • <3>.唯一索引
    • 唯一索引不允许两行具有相同的索引值。只要列中数据是唯一的,就可在同一个表上创建一个唯一的聚集索引。如果必须实施唯一性以确保数据的完整性,则应在列上创建UNIQUE或PRIMARY KEY约束,而不要创建唯一索引。
    • (3).使用索引的代价
    • 虽然索引有很多优点,但索引的存在也让系统付出了一定的代价。创建索引和维护索引都会消耗时间,当对表中的数据进行增加、删除和修改操作时,索引就要进行维护,否则索引的作用就会下降;另外,每个索引都会占用一定的物理空间,如果占用的物理空间过多,就会影响到整个SQL Server系统的性能。
    • (4).建立索引的原则
    • 创建索引虽然可以提高查询速度,但是它是牺牲一定的系统性能。因此,在创建时,哪些列适合创建索引,哪些列不适合创建索引,需要进行判断,具体以下原则:
    • <1>.有主键的数据列要建立索引。因为主键可以加速定位到表中的某一行。
    • <2>.有外键的数据列要建立索引。外键列通常用于表与表之间的连接,在其上创建索引可以加快表间的连接。
    • <3>.对于经常查询的数据列最好建立索引
    • A.对于需要在指定范围内快速或频繁查询的数据列,因为索引已经排序,其指定的范围是连续的,查询可以利用索引的排序,加快查询的时间。
    • B.经常用在WHERE子句中的数据列,将索引建立在WHERE子句的集合过程中,对于需要加速或频繁检索的数据列,可以让这些经常参与查询的数据列按照索引的排序进行查询,加快查询的时间。
    • <4>.对于那些查询中很少涉及的列、重复值比较多的列不要建立索引。
    • 例如,在查询中很少使用的列,有无索引并不能提高查询的速度,相反增加了系统维护时间和消耗了系统空间。
    • <5>.对于定义为text、image和bit数据类型的列不要建立索引。因为这些数据类型的数据列的数据量要么很大、要么很小,不利于使用索引。

        

  • 相关阅读:
    Linux下退出vi编辑模式
    Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library(开发日志28)
    Could not download bmob-sdk.arr(cn.bmob.android:bmob-sdk:3.7.8)(开发日志25)
    本周总结
    思考概念方式
    面试体系目录
    2020面试记录
    日志
    redis 实现分布式锁
    SpringMvc servlet 拦截器 过滤器关系和区别及执行顺序
  • 原文地址:https://www.cnblogs.com/hq-123/p/5265842.html
Copyright © 2020-2023  润新知