• 视图


    --上节回顾 --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' 不可更新,因为修改会影响多个基表。

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

  • 相关阅读:
    【转】 史上最详尽的平衡树(splay)讲解与模板(非指针版spaly)
    HihoCoder1325 : 平衡树·Treap(附STL版本)
    HihoCOder1323 : 回文字符串(区间DP)
    从分布式一致性算法到区块链共识机制
    Nacos Committer 张龙:Nacos Sync 的设计原理和规划
    MaxCompute Studio使用心得系列7——作业对比
    阿里云MaxCompute 2019-4月刊
    DDoS攻击新趋势:海量移动设备成为新一代肉鸡
    胡喜:从 BASIC 到 basic ,蚂蚁金服技术要解决两个基本的计算问题
    阿里开发者招聘节 | 面试题14:如何实现两金额数据相加(最多小数点两位)
  • 原文地址:https://www.cnblogs.com/mingjian/p/3428379.html
Copyright © 2020-2023  润新知