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

  • 相关阅读:
    查看DNS、IP、Mac等
    windows测试物理网络
    ACCEPT详解
    oracle动静视图-权限-角色-参数
    [ PHP+jQuery ] ajax 多级联动菜单的应用:电商网站的用户地址选择功能 ( 二 )
    使用Python爬取网页的相关内容(图片,文字,链接等等)
    使用Python爬取网页的相关内容(图片,文字,链接等等)
    使用Pycharm安装插件时发生错误
    使用Pycharm安装插件时发生错误
    使用Pycharm安装插件时发生错误
  • 原文地址:https://www.cnblogs.com/chimingyang/p/5269626.html
Copyright © 2011-2022 走看看