zoukankan      html  css  js  c++  java
  • SQL ——索引、视图和事务

    一、索引:

    1、概述:索引和视图主要起到辅助查询和组织数据的功能。可以提高查询的效率,索引是数据库规划和系统维护的一个关键部分。

    1.1索引结构:索引是一个单独的、物理的数据库结构,索引依赖于表建立,它提供了数据库中编排表中数据的内方法

    1.2  B-树(平衡树)

      B-树的顶端节点称为根节点。索引中的底层节点称为叶节点。根节点于叶节点之间的任何索引级别统称为中间级

    1.3索引类型

      1.3.1、聚集索引:定义了数据在表中存储的物理顺序。只能有一个

      1.3.2、非聚集索引:并不存储表数据本身,在一个表中可以同时存在多个非聚集索引。

    1.4 T-SQL创建索引

    --T-SQL 创建索引
    --给学员信息表创建一个索引:按年龄升序,年龄相同的再按姓名降序
    if exists(select * from sys.indexes where name='IX_stuInfo_AgeName')
    drop index stuInfo.IX_stuInfo_AgeName
    go
    create nonclustered index IX_stuInfo_AgeName 
    on stuInfo(age,stuname desc)
    
    --使用索引IX_stuInfo_AgeName查询学员信息
    select * from StuInfo
    with(index=IX_stuInfo_AgeName)

    或者:

    --给学员创建一个索引:按笔试成绩降序,笔试成绩相同再机试成绩降序
    if OBJECT_ID('IX_Exam_Score') is not null
    drop index Exam.IX_Exam_Score
    go
    create nonclustered index IX_Exam_Score
    on Exam(WriteExam desc,LabExam desc)
    with fillfactor=30
    --使用索引IX_Exam_Score查询学员信息
    select * from Exam
    with(index=IX_Exam_Score)

    1.5 新建删除索引

    1)、重新生成索引:

    ALTER INDEX index_name ON table_or_view_name REBUILD

    2)、重新组织索引

    ALTER INDEX index_name ON table_or_view_name RGORGANIZE

    3)、禁用索引

    ALTER INDEX index_name ON table_or_view_name DISABLE

    4)、删除索引

    DROP INDEX <table or view name>.<index name>
    或者:
    DROP INDEX <index name> ON <table or view name>

    1.6 索引的优缺点

    优点:加快访问速度、加强行的唯一性

    缺点:1、带索引的表在数据库中需要更多的存储空间

        2、更新数据的命令需要更长的出来时间,因为它们需要对索引进行更新

    二、视图

    A、概述:视图是一种数据库对象,是从一个或多个基表(或视图)导出的虚表。

    B、视图的用途:

    1、筛选表中的行

    2、防止未经许可的用户访问敏感数据

    3、降低数据库的重复程度

    4、将多个物理数据库抽象为一个逻辑数据库

    C、创建视图

    语法格式如下:

    CREATE VIEW [schema_name . ] view_name [(column [,……n])]
    [WITH <view_attribute>[,……n]] AS
    select_statement
    [WITH CHECK OPTION]
    其中:
    <view_attribute> ::={[ENCRYPTION] [SCHEMABINDING] [VIEW_METADATA]}

    示例:

    if exists(select * from sys.views where name='vw_Goods')
    drop view vw_Goods
    go
    create view vw_Goods
    as 
    select TypeName 类型名称,Name 商品名称,Price 价钱,ProductionDate 生产日期
    from Goods gs,GoodsType gt where gs.TypeId=gt.TypeId and ProductionDate like '%2017%'
    --YEAR(ProductionDate)=2017
    go
    
    select * from vw_Goods

    三、事务

    1、事务的ACID属性

    a)原子性:一个事务对数据库的所有操作,是一个不可分割的工作单元,这些操作要摸全班执行,要么什么也不做。保证原子性是数据库系统本身的职责,DBMS的事务管理子系统来实现

    b)一致性:一个事务独立执行的结果应保持数据库的一致性,即数据不会因为事务的执行而遭受破坏。

    c)隔离性:在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样。此时称事务达到了隔离性的要求。

    d)持久性(永久性):一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反应在数据库中,即使系统发生故障后,也应该保留这个事务执行的痕迹。

    2、事务的状态

    活动状态:初始状态,事务能够执行时处理这个状态

    部分提交状态:最后一天语句北执行之后

    失败状态:发现正常的执行不能继续之后

    中止状态:事务回滚并且数据库已被恢复到事务开始执行前的状态之后

    提交状态:成功完成之后

    3、事务的分类

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

    4、事务的语法

    BEGIN TRANSACTION——开启事务

    COMMIT TRANSACTION ——提交事务

    ROLLBACK TRANSACTION——回滚事务

    例子:

    --转账事务
    --实现张三转账800给李四
    begin transaction 
    declare @err int=0--声明一个整型变量,初值为0
    update Bank set cMoney=cMoney-800 where cName='张三' 
    set @err=@err+@@ERROR
    update Bank set cMoney=cMoney+800 where cName='李四' 
    set @err=@err+@@ERROR
    if @err>0  --条件
    begin
    print '交易失败!,事务回滚'
    rollback tran
    end
    else
    begin
    print '交易成功,事务提交!'
    commit tran
    end

     结果:

     如果不成功则为如下:

  • 相关阅读:
    vue后台管理系统——权限管理模块
    vue后台管理系统——用户管理模块
    vue后台管理系统——主页布局
    vue后台管理系统——登录/退出功能
    vue后台管理系统
    kratos 日志请求响应记录
    composer 版本切换
    Nacos搭建并使用
    go micro 搭建微服务
    consul命令行参数
  • 原文地址:https://www.cnblogs.com/1219zy/p/8289777.html
Copyright © 2011-2022 走看看