• 优化MySchool数据库(事务、视图、索引)


    事务、视图、索引:

            事务:当生活逻辑中的“一个步骤”,需要使用多条SQL去完成时,必须使用事务来确保其“完整性“。

            视图:简化数据库结构,方便你编写SQL语句(简化SQL语句的编写)

            索引:提高“数据检索效率”

     

    事务:

          ---- 用于保证多条SQL语句的同步执行(要么一起全部执行成功,要么全部都回滚不执行)

          ---- 语法:

                          Begin Transaction        (开始事务)

                                   {  多条SQL语句 }

                          commit  Transaction    (提示事务)

                          rollback  Transaction    (回滚事务)

     

         ---- 实际编码:

                         declare  @errorSum  int

                         set  @errorSum = 0

                         Begin Transaction

                                  insert into .......(SQL语句)

                                  set @errorSum = @errorSum + @@ERROR

         insert into .......(SQL语句)

         set @errorSum = @errorSum + @@ERROR

                                  ......

                          if  @errorSum = 0

                                  commit  transaction

                          else

        rollback  transaction

     

     

    事务特点:

    ------ 原子性、一致性、隔离性、持久性

            原子性:整个事务,无论其中包含多少SQL语句,都是一个整体!要么都提交,要么都回滚;

    一致性:事务执行前后,整个数据库都满足各种约束条件

    隔离性:多个事务操作同一数据对象,彼此的“执行过程”和“效果”相互隔离,互不影响。

    持久性:虽然事务执行过程中,对数据库的影响具有不确定性(提交、回滚),但是一旦事务结束(commit、rollback),对数据库照成的影响将是持久存在的。

     

    事务分类:

            ------ 显式事务、隐式事务、自动提交事务

              显式事务:以Begin Transaction开始,rollback commit 结束的事务

              隐式事务:以“开关”(ON)方式打开事务,当事务结束后,自动开始新事务,直到“开关”关闭(OFF)

              自动提交事务:SQL SERVER 的默认事务方式,每句SQL都是独立的事务

     

     

    视图:

            ---- 当我们进行数据库设计时,为了减少数据的冗余,常常会将生活中本身关联在一起的数据,拆分到不同的表单中!这样,导致在访问数据时,SQL代码复杂,效率也低下(多表联查)。可以将“多表联查”的SQL语句预先存放在数据库中,从减少每次使用时,都重新编写的麻烦!

           ----- 视图:就是保存在数据库中的“一条”“select语句”。视图的使用与“Table”相似,但table中直接存放着数据,但是view中没有存放数据,数据依然存放在其对应的基础表中。

           ----- 视图中Select语句,编写时的注意事项:  

        • order       by (除非含有Top)
        • into
        • 表变量(临时表)   

          ------ 视图的应用场景:

        • 简化后台数据库的结构,方便编写数据访问代码简化sql(将多个物理数据库当做一个逻辑数据库)
        • 保护“敏感数据”,防止非法访问!(通过其Select对行、列进行过滤)          

     

     

    索引:

          ------- 将数据表中的某列进行排序,让其以后对该列的查询能够在“排序后”的结果上进行,从而提高数据检索的效率(排序的过程可以在新的索引表中进行【非聚集索引】,也可以在原有的表单中进行【聚集索引】)

         -------- 创建语法:

                            if exists(select * from sysindexes where  name = '索引名')

    drop  index  表名.索引名

           go

           create index 索引名  on   表名(列名)

           go

     

                      索引分类:

        • 唯一索引---- 索引表中所有的索引项,不允许重复
        • 主键索引---- 依据表单的主键列,创建索引表
        • 非聚集索引  ----- 将表单中的“搜索列”,复制到索引表并排序。(数据表与索引表各自单独存在)
        • 聚集索引 ---- 在原始的物理表单上,直接对“搜索列”进行排序。(数据表与索引表合二为一)

                         注意:

    1、一个表单只能创建一个“聚集索引”,但可以创建多个“非聚集索引”

    2、表单在创建主键时,将自动在表单上创建一个“主键索引”及“聚集索引”

     

                   索引的利弊:

                           利:提高数据检索效率

                           弊:增加了系统的数据存储开销、数据更改时效率降低             

     

                   索引的应用场景:

                           适用:频繁搜索(where),频繁被查询(select) ,排序,关联查询的列(主外键列)

                          不适用:行少、列数据变化少

     

     

     

     

     

     

     

     

    小贴士:

                            
      

     系统表名

      
      

    所在数据库

      
      

    存放的系统信息

      
      

    sysDataBases

      
      

    master

      
      

    数据库信息

      
      

    sysObjects

      
      

    用户数据库

      
      

    表、视图、存储过程

      
      

    sysIndexes

      
      

    用户数据库

      
      

    索引

      

     

     

    select ....

    into 新表名

    from ....

    ----- 作用,将查询结果,保存到一个【新建的数据表单】中。

     

  • 相关阅读:
    yaha分词
    可定制的分词库——Yaha(哑哈)分词
    共有11款Python 中文分词库开源软件
    【机器学习实验】使用朴素贝叶斯进行文本的分类
    numpy.ones_like(a, dtype=None, order='K', subok=True)返回和原矩阵一样形状的1矩阵
    numpy.zeros(shape, dtype=float, order='C')
    numpy.ones(shape, dtype=None, order='C')
    备忘录
    关于决策平面
    关于surf显示立体图,可视化分析数据
  • 原文地址:https://www.cnblogs.com/why168888/p/4278906.html
Copyright © 2020-2023  润新知