zoukankan      html  css  js  c++  java
  • 事务,视图,和索引

    一.事务

    1.什么是事务:事务是一种机制,一个操作序列,它包含一组数据库的操作命令。并把所有命令作为一个整体一起向系统提交或撤销操作请求

    ,要么这些数据库操作都执行,要不都不执行。同生共死同进退,事务是一个不可分割的整体。

    2:事务的四种特性:原子性、一致性、隔离性、持久性

    3:如何执行事务操作:1.开始事务:begin transaction

                                  2.提交事务:commit transaction

                                  3.回滚事务:rollback transaction

    例如:转账问题假定张三的账户直接转账1000元到李四的账户上:

     

     1 use mybank
     2 create table bank
     3 (
     4      cardId int primary key identity(1,1) not null,
     5      cardowner nvarchar(10) not null,
     6      moneyNum money
     7 )
     8 go
     9 alter table bank
    10 add constraint CK_moneyNum check(moneyNum>=1)
    11 go
    12 insert into bank
    13 values('张三',1000)
    14 insert into bank
    15 values('李四',1)
    16 set nocount on
    17 print '查看转账前的余额'
    18 select * from bank
    19 go
    20 begin transaction
    21 --定义变量,用于累加事务执行中出现的错误
    22 declare @errorSum int 
    23 set @errorSum=0
    24 update bank set moneyNum-=1000 where cardId=1
    25 set @errorSum+=@@error
    26 update bank set moneyNum+=1000 where cardId=2
    27 set @errorSum+=@@ERROR
    28 print '查看转账中的余额'
    29 select * from bank
    30 if(@errorSum<>0)
    31 begin
    32 print '交易失败,回滚事务'
    33 rollback transaction
    34 end
    35 else 
    36 begin
    37 print '交易成功,提交事务'
    38 commit transaction
    39 end
    40 go
    41 print '查询账户余额'
    42 select * from bank
    43 go

    消息为:结果为:

    4:事物的分类:

    1:显式事务:用begin transaction明确指定事物的开始(自己动手写的)

    2:隐式事务:通过设置set implicit_transaction on 语句将隐式事务模式设置打开.当隐式事务操作时,SQL Server将在提交或回滚后自动启动新事务.不许描述开始,记得提交和回滚

    3:自定义事务:将单独的T-SQL语句默认为一个事物.

    二.视图

    视图本质:视图是一张虚拟表,真正保存的是一堆SQL语句

    创建视图的语法:

    create view view_name

    as

    <SQL语句>

    删除视图的语法:

    drop view view_name

    查看视图数据的语法:

    select col_name1,col_name2,col_name3..........from view_name

    例:使用T-SQL语句为教员创建查看'oop'课程最近一次考试成绩的视图,并通过视图查询结果

     1 use MySchool
     2 go
     3 if exists(select * from sysobjects where name='vw_studentresult')
     4 drop view vw_studentresult
     5 go
     6 create view vw_studentresult
     7 as 
     8 select 姓名=Studentname,学号=student.studentNo,成绩=studentresult,
     9        课程名称=subjectname,考试日期=examdate
    10        from student,Result,Subject
    11 where subject.SubjectId=(select SubjectId from Subject where SubjectName='oop')
    12 and examdate=(select max(ExamDate) from Result where SubjectId=(select SubjectId from Subject where SubjectName='oop'))
    13 go
    14 select * from vw_studentresult

    查询结果如图所示:

    问题:能不能对视图进行增删改操作:(考试可以,面试不行)

           视图可以嵌套

           视图中的select后不能跟(

           Order by  ,除非有top关键字

          不能有into

          引用临时表或者是变量).

     三.什么是索引:

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

     2.索引分类:唯一索引、主键索引、聚集索引、非聚集索引、复合索引、全文索引

     3.使用T-SQL语句创建索引:

      create unique clustered|nonclustered index indexname

      on table (column_name[,column_name]...)

      [with fillfactor=x]

     4.删除索引:drop index table_name.index_name

    例:为学生姓名创建非聚集索引

     1 --创建索引
     2 if exists(select name from sysindexes where name='IX_studentname')
     3    drop index.student.IX_studentname
     4    create nonclustered index IX_studentname
     5    on student(studentname)
     6    with fillfactor=30
     7    go
     8 --查看数据
     9 select * from Student
    10 with (index=IX_studentname)
    11 where StudentName like '张%'

    如图结果为:

    查看索引:

    用系统储存过程sp_helpindex查看

    sp_helpindex table_name

    用视图sys.indexes查看

    select * from sys.indexes

  • 相关阅读:
    使用 yo 命令行向导给 SAP UI5 应用添加一个新的视图
    SAP Fiori Elements 应用的 manifest.json 文件运行时如何被解析的
    SAP UI5 标准应用的多语言支持
    微软 Excel 365 里如何设置下拉菜单和自动高亮成指定颜色
    SAP Fiori Elements 应用里的 Title 显示的内容是从哪里来的
    本地开发好的 SAP Fiori Elements 应用,如何部署到 ABAP 服务器上?
    如何在 Cypress 测试代码中屏蔽(Suppress)来自应用代码报出的错误消息
    教你一招:让集群慢节点无处可藏
    应用架构步入“无服务器”时代 Serverless技术迎来新发展
    MySQL数据库事务隔离性的实现
  • 原文地址:https://www.cnblogs.com/chimingyang/p/5269626.html
Copyright © 2011-2022 走看看