zoukankan      html  css  js  c++  java
  • 实验3 SQL语言—更新操作、视图、索引等操作

    实验3 SQL语言—更新操作、视图、索引等操作

    实验目的要求

    1. 熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入、修改、删除操作。

    2. 熟悉SQL语言有关视图的操作,能够熟练使用SQL语句来创建需要的视图,定义数据库外模式,并能使用所创建的视图实现数据管理。

    3. 掌握索引设计原则和技巧,能够创建合适的索引以提高数据库查询。

    实验主要内容

    1. 针对SQL Server数据库设计单元组插入、批量数据插入、修改数据和删除数据等SQL语句。理解和掌握INSERT、UPDATE和DELETE语法结构的各个组成成分,结合嵌套SQL子查询,分别设计几种不同形式的插入、修改和删除数据的语句,并调试成功。

    2. 针对给定的数据库模式,以及相应的应用需求,创建视图、创建带WITH CHECK OPTION的视图,并验证视图WITH CHECK OPTION选项的有效性。理解和掌握视图消解执行原理,掌握可更新视图和不可更新视图的区别

    3. 针对给定的数据库模式和具体应用需求,创建唯一索引、函数索引、复合索引等;修改索引;删除索引。设计相应的SQL查询验证索引有效性。

    实验仪器设备

    1. 学生每个一台PC
    2. 已安装SQL Server环境

    实验记录

    数据更新操作

    单元组插入

     --向图书表中插入一条单元组数据('B6','信息论','28.2')
     INSERT 
    INTO 图书(BNO,BNAME,PRICE)
    VALUES('B6','信息论','28.2');
    

    批量数据插入

    --子查询嵌套在INSERT语句中用以插入批量数据
    CREATE TABLE LNTE
    (LNO NCHAR(10) PRIMARY KEY,
    TEL INT);  --创建一个新的LNAME-TEL表
    --从图书馆表中选择LNO和TEL两列数据批量插入新建表LNTE中
    INSERT 
    INTO LNTE
    SELECT LNO,TEL
    FROM 图书馆
    

    修改数据

    UPDATE 图书
    SET BNAME=大学英语
    WHERE BNO='B5';   --将图书表中的操作系统改为大学英语
    
    --带子查询的修改语句可以实现批量修改数据
    UPDATE SC
    SET GRADE=0
    WHERE Sno IN
    (SELECT Sno
    FROM Student
    WHERE Sdept='CS');
    

    删除数据

    --删除一个元组的值
    DELETE
    FROM 图书
    WHERE BNAME='系统分析与设计';
    
    --删除多个元组
    DELET
    FROM 图书  --这条语句将删除整个图书表
    
    --带子查询的删除语句
    DELET 
    FROM 图书
    WHERE BNO IN
    (SELECT BNO
    FROM 图书发行
    WHERE QTY=10);
    

    视图

    创建视图

    CREAT VIEW IS_BK
    AS
    SELECT BNO,BNAME,PRICE
    FROM 图书
    WHERE PRICE>10;
    

    带WITH CHECK OPTION的视图

    CREAT VIEW IS_BK
    AS
    SELECT BNO,BNAME,PRICE
    FROM 图书
    WHERE PRICE>10;
    WITH CHECK OPTION;
    

    视图消解执行原理

    把对视图的查询转化为对基本表的查询称为视图的消解(View Resolution).
    SELECT S#,SA FROM IS_S WHERE SA <20
    消解为:
    SELECT S# ,SA FROM S WHERE SD='IS' AND SA 90
    消解为:
    对:SELECT S#, AVG(GR) FROM SC GROUP BY S# HAVING AVG(GR)>90
    

    可更新视图和不可更新视图的区别

    一般地行列子视图是可更新的。除行列子视图外,有些试图理论上是可更新的。

    目前,各个关系数据库管理系统一般都只允许对行列子集视图进行更新,而且各个系统对视图的更新还有更进一步的规定。

    索引

    创建唯一索引

    CREATE UNIQUE INDEX BKNO ON 图书(BNO);
    

    创建复合索引

    create nonclustered index Index_StuNo_SName
    on Student(S_StuNo,S_Name)
    with(drop_existing=on)
    

    修改索引

    ALTER INDEX BKNO RENAME TO BOOKNO;
    

    删除索引

    DROP INDEX BOOKNO;
    

    验证索引有效性

    SELECT DISTINCT name
    FROM part;
    CREATE INDEX part_name ON part(name);
    --DROP INDEX part_name ON part;
    

    思考题

    1. 为什么不能随意删除被参考表中的主码。

      删除主码会破坏数据的完整性,所以不能删除主码。

    2. 数据库中一般不允许更改主码数据。如果需要更改主码数据时,怎样处理?

      每次修改的时候检查一下改过之后的数据在数据库存中是否存在。SQL: SELECT * FROM 表名 WHERE 主键 = 更改过后的值。

    3. 两种SQL Server的安全认证模式及特点。

      1. 混合模式,百就是使用windos集成的身份验证也可以,使用SQL Server独立认证也可以。这种方式验证方式较宽,安全性跟兼容性是较为平衡的。
      2. Windows集成身份验证,仅度仅支持windos集成的身份,这种方式比较不安全,因为没有SQL Server的独立授权,与Windows自身的权限可能出现专交叉问题,会造成安全问题。
    4. 什么是触发器?主要功能时什么?

      触发器可以查询其他表,而且可以包含复杂的 SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。
        触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

      触发器的主要作用是:

      ①完成比CHECK约束更复杂的数据约束。触发器可以引用其他表中的列。

      ②为保证数据库性能而维护的非规范化数据。比如,为了提高数据的统计效率,在销售情况表中增加了统计销售总量的列,以后,每当在此表中插入数据时,都是用触发器统计销售总值列的新数值,并将统计后的新值保存在此表中。以后当查询销售总值时,直接从表中提取数据即可,而无须再使用查询语句进行统计,从而提高数据的统计效率。

      ③实现复杂的业务规则,触发器可以使业务的处理任务自动进行。

  • 相关阅读:
    Python-温度的转换
    这些Servlet知识你一定要知道,金九银十大厂面试官都爱问
    【建议收藏】一份阿里大牛花了三天整理出来的XML学习笔记,写的非常详细
    一年六个月十八天,从外包到字节跳动客户端提前批,没想到我也能够逆袭
    面试官:小伙子,你能给我说一下HashMap的实现原理吗?
    盘点一下面试官最爱问的泛型和包装类,建议反复观看,真的写的非常详细
    深度分析:面试阿里,字节跳动,美团90%被问到的List集合,看完还不懂算我输
    2020阿里Java面试题目大汇总,看看你离阿里还有多远,附答案!
    不会吧,你连Java 多线程线程安全都还没搞明白,难怪你面试总不过
    java开发两年,连Spring中bean的装配都不知道?你怎么涨薪啊
  • 原文地址:https://www.cnblogs.com/Weber-security/p/13167987.html
Copyright © 2011-2022 走看看