zoukankan      html  css  js  c++  java
  • SqlServer视图(view)

    --上节回顾
    --1.什么是事务
    --2.事务的特征
    --原子性、一致性、隔离性、持久性
    --3.与事务相关的t-sql命令
    --开启事务:begin transaction
    --提交事务:commit transaction
    --回滚事务:rollback transaction


    ----------------视图------------------
    --首先思考一个问题:查询上机记录信息。
    --计算机名、会员名称、上机开始时间、上机结束时间、金额


    select  cp.chvComputerName, ci.chvUserName, ri.dtmStart, ri.dtmEnd, ri.mnyFee
    from TblRecordInfo as ri--as表示为表取别名
    inner join TblCardInfo as ci on ri.intCardId=ci.intCardId--内连接用inner join,同时应该为两张表指定连接字段
    inner join TblComputer as cp on ri.intComputerId=cp.intComputerId

    --评价:上述书写sql查询语句的方式太繁琐,每次书写的时候都会感觉很复杂

    --思考:到底有木有一种非常方便的操作方式,能够实现一样的查询效果

    --答案:肯定有:视图来解决

    --什么是视图

    --注意点:
    --1.视图中的数据并没有保存在视图中,它仅仅保留查询的结果
    --  这些记录是保存在表当中的

    --如何创建视图,创建视图有相应的语法
    create view view_RecordDetail
    as
      select  cp.chvComputerName, ci.chvUserName, ri.dtmStart, ri.dtmEnd, ri.mnyFee
      from TblRecordInfo as ri--as表示为表取别名
      inner join TblCardInfo as ci on ri.intCardId=ci.intCardId--内连接用inner join,同时应该为两张表指定连接字段
      inner join TblComputer as cp on ri.intComputerId=cp.intComputerId
     
     --如何使用视图:使用方式和表一样
     select * from view_recorddetail
     go
     
     --视图是不是只能用来进行查询操作???
     --不是的,视图也可以用来进行新增\修改\删除
     
     --利用学生信息表进行视图的增删改操作
     create table TblStudent
     (
       intStudentId int primary key identity,
       chvStudentName nvarchar(30) not null,
       dtmBirthday datetime null,
       chvCeilPhone nvarchar(11) not null
     )
     go
     
     --创建视图:学生id、学生姓名、学生出生日期
     create view view_Student
     as
       select intstudentid, chvstudentname,dtmbirthday from TblStudent
      
     go

    --通过视图完成对学生信息的新增
    insert into view_student
    (chvstudentname,dtmbirthday)
    values
    ('zhangsan', '1989-9-9')
    go
    --上述sql会执行失败,原因是:学生的手机号不能为空

    --如果修改视图
    alter view view_student
    as
       select intstudentid, chvstudentname,dtmbirthday, chvCeilPhone from TblStudent
    go  
    --新增数据
    insert into view_student
    (chvstudentname,dtmbirthday, chvCeilPhone)
    values
    ('zhangsan', '1989-9-9','13698766666')
    go
    --验证,数据是在视图中还是在表中
    select * from TblStudent;
    go
    select * from view_student
     
    --通过视图进行数据修改

    update view_student
      set chvceilphone = '13666666666'
    where chvstudentname = 'zhangsan'
    go

    select * from view_student
    go

    --通过视图删除数据
    delete from view_student
    where chvstudentname='zhangsan'
    go

    select * from view_student;
    select * from TblStudent;
    go

    --如何删除视图
    --如何视图存在,则删除;否则不执行删除操作
    if exists (select 1 from sys.sysobjects where name='view_student')
    begin
      print '视图存在,即将删除...'
      drop view view_student
    end
    else
    begin
      print '视图不存在'
    end

    alter view view_RecordDetail
    as
      select cp.intComputerId, ci.intCardId,  cp.chvComputerName, ci.chvUserName, ri.dtmStart, ri.dtmEnd, ri.mnyFee
      from TblRecordInfo as ri--as表示为表取别名
      inner join TblCardInfo as ci on ri.intCardId=ci.intCardId--内连接用inner join,同时应该为两张表指定连接字段
      inner join TblComputer as cp on ri.intComputerId=cp.intComputerId
     
    select * from view_recorddetail
    go

    --如果执行下面的语句:
    --A:失败  B:tblcomputer中的记录被删除 
    --c:recoredinfo表中的记录被删除  d:B+C
    delete from view_recorddetail
    where intComputerId=2
    --答案:A  
    --原因:视图或函数 'view_recorddetail' 不可更新,因为修改会影响多个基表。


    --是否是只要视图由多张表组成,那么就不能执行删除操作
    --否定的,是可以删除的,只是要满足指定的条件


     

  • 相关阅读:
    Python机器学习笔记:使用sklearn做特征工程和数据挖掘
    Python numpy中矩阵的用法总结
    Python机器学习笔记:K-近邻(KNN)算法
    Python机器学习笔记:Logistic Regression
    python机器学习笔记:ID3决策树算法实战
    Mysql 多表查询详解
    JavaScript cookie操作实现点赞功能
    js操作cookie
    【IntelliJ IDEA】idea上提交代码到GitHub,已经提交了 但是GitHub上却没有的解决办法
    Mybatis分页插件PageHelper的配置和使用方法
  • 原文地址:https://www.cnblogs.com/changjiang/p/2605292.html
Copyright © 2011-2022 走看看