数据库原理及应用——数据更新和视图创建

简介: (1)所使用的学生管理库中的三张表:(2)数据更新具体完成以下例题:(3)视图操作具体完成以下例题:

 实验三  数据更新和视图创建

一、实验目的:

    1. 熟悉数据库的数据更新操作,能够使用SQL语句对数据库进行数据的插入、修改、删除操作;
    2. 熟悉SQL语言有关视图的操作,能够熟练使用SQL语句来创建需要的视图,定义数据库外模式,并能使用所创建的视图实现数据管理。

    二、实验要求:

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

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

    三、实验重点和难点:

    实验重点:

    (1)插入、修改和删除数据的SQL。

    (2)创建视图。

    实验难点:

      1. 与嵌套SQL子查询相结合的插入、修改和删除数据的SQL语句;利用一个表的数据来插入、修改和删除另外一个表的数据。
      2. 可更新的视图和不可更新的视图之区别, WITH CHECK OPTION的验证。

      四、相关知识:(电子教材:P113---P127)

      SQL Server提供了很多方法更新表中数据。以插入记录为例,可以使用INSERT语句、VALUES子句将特定值集合插入一行;可以使用数据库接口API(ADO、OLE DB、ODBC和DB-Library)中的函数进行数据插入等。本实验主要掌握INSERT、UPDATE和DELETE语句的基本用法。

      (1)插入操作,其语句的一般格式为

      INSERT INTO table_or_view [(colum_list)]

      VALUES (date_values);

      此语句是使date_values作为一行数据记录插入已命名的表或视图table_or_view中。

      Column_list是由逗号分隔的table_or_view的列名列表,用来指定为其提供数据的列。如果没有指定column_list,表或视图中的所有列都将接收数据。

      如果column_list没有为表或视图中的所有列命名,将在列表中没有命名的任何列中插入一个NULL值(或者在默认情况下为这些列定义的默认值)。在列的列表中没有指定的所有列都必须允许NULL值或者指定的默认值。否则SQL Server将返回一个错误。

      (2)修改操作语句的一般格式为

      UPDATE  表名 SET  <列名>=<表达式>[,<列名>=<表达式>]……

      [where  <条件>];

      其功能是修改指定表中满足WHERE子句条件的元组。其中SET子句用于指定修改方法,即用<表达式>的值取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。

      (3)删除语句的一般格式为

      DELETE FROM  <表名>

      [WHERE <条件>];

      其功能是从指定表中删除满足WHERE子句条件的所有元组。如果省略WHERE子句,则表示要删除表中的所有元组,但表的定义仍在字典中。

      (4)视图

      视图是根据子模式建立的虚拟表。一个视图可以由一个表构造,也可以由多个表构造。利用集成管理中心和视图创建向导进行创建,查看和修改视图就如同对表的操作一样,非常容易。

      视图一经定义,就可以和基本表一样被查询、删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。

      视图的作用因应用需求的使用差异性而不同程度地体现。

      五、实验内容

      (1)所使用的学生管理库中的三张表:

      1、STUDENT(学生信息表)

      SNO(学号)

      SNAME(姓名)

      SEX(性别)

      SAGE(年龄)

      SDEPT(所在系)

      95001

      李勇

      20

      CS

      95002

      刘晨

      19

      IS

      95003

      王名

      18

      MA

      95004

      张立

      19

      IS

      95005

      李明

      22

      CS

      95006

      张小梅

      23

      IS

      95007

      封晓文

      20

      MA

      2.COURSE(课程表)

      CNO(课程号)

      CNAME(课程名)

      CPNO(先行课)

      CCREDIT(学分)

      1

      数据库

      5

      4

      2

      数学

      2

      3

      信息系统

      1

      4

      4

      操作系统

      6

      3

      5

      数据结构

      7

      4

      6

      数据处理

      2

      7

      PASCAL语言

      6

      4

      3、SC(选修表)

      SNO(学号)

      CNO(课程号)

      Grade(成绩)

      95001

      1

      92

      95001

      2

      85

      95001

      3

      88

      95002

      2

      90

      95002

      3

      80

      95003

      1

      78

      95003

      2

      80

      95004

      1

      90

      95004

      4

      60

      95005

      1

      80

      95005

      3

      89

      95006

      3

      80

      95007

      4

      65

      (2)数据更新具体完成以下例题:

      1.插入一条学号为“95050”,姓名为“陈冬”的选课记录。

      注:除学号、姓名为真实数据,其他数据随意。

      insert

          into student(Sno,Sname,Ssex,Sage,Sdept)

          values('95050','陈冬','男','18','IS');

      image.gif编辑

      2.将一新学生记录(学号:99999;姓名:风清扬;性别:男;年龄:20;所在系:  

      计算机科学与技术系’CS’)插入学生表中;

      插入一条该生选课记录(‘99999’,’4’,’60’)。

      insert

          into student

          values('99999','风清扬','男','20','CS');

      insert

          into sc

          values('99999','4','60');

      image.gif编辑

      3.对每一个系,求学生的平均年龄,并把结果存入数据库。

      (提示:对于这道题,首先要在数据库中建立一个有两个属性列的新表,其中一列存放系名,另一列存放相应系的学生平均年龄。

      CREATE TABLE Deptage(所在系 CHAR(20),平均年龄SMALLINT);

      然后对数据库的学生表按所在系分组求平均年龄,再把所在系和平均年龄存入新表中。)

      create table Dept_age

          (Sdept char(15),

           Avg_age smallint);

      insert

          into dept_age(Sdept,Avg_age)

          select Sdept,avg(Sage)

          from student

          group by Sdept;

      image.gif编辑

      4.将学号“95001”的学生年龄改为22岁。

      update student

          set Sage=22

          where Sno='95001';

      image.gif编辑

      5.将所有学生的年龄增加一岁。

      update student

           set Sage=Sage+1;

      image.gif编辑

      6.将课程“数据库”的成绩用五级制显示,成绩>=90为优秀,90>成绩>=80为良好,80>成绩>=70为中等,70>成绩>=60为及格,成绩<60为不及格。

      select Sno,Cno,

          (case when grade>=90 then'优秀'when grade>=80 then'良好'

          when grade>=70 then'中等'when grade>=60 then'及格'else'不及格'end)as grade

          from sc

          where Cno='1';

      image.gif编辑

      7.将计算机科学系“CS”全体学生的成绩置零。

      select Sno,Cno,

          (case when grade>=90 then'优秀'when grade>=80 then'良好'

          when grade>=70 then'中等'when grade>=60 then'及格'else'不及格'end)as grade

          from sc

          where Cno=

                (select Cno

                 from course

                 where Cname='数据库');

      image.gif编辑

      8.删除“信息系统”课程成绩小于李明学生成绩的记录。

      delete

      from sc

      where Sno in(

      select Sno

      from sc

      where (Grade<(

            select Grade

            from sc

            where Sno=(

                select Sno

                from student

                where Sname='李明')

            and (Cno=(

                select Cno

                from course

                where Cname='信息系统')

                )

            ))

      )

      image.gif编辑

      9.删除学号为“95006”的学生记录。(提示:注意外键的约束

      set foreign_key_checks=0;

      delete

         from student

         where Sno='95006';

      set foreign_key_checks=1;

      image.gif编辑

      10. 删除计算机科学系“CS”所有学生的选课记录

      delete

         from sc

         where Sno in

               (select Sno

                from student

                where Sdept='CS');

      image.gif编辑

      (3)视图操作具体完成以下例题:

      1. 建立信息系“IS”学生的视图

      create view IS_Student

         as

         select Sno,Sname,Ssex,Sage

         from student

         where Sdept='IS';

      image.gif编辑

      2.建立信息系IS”学生的视图,并要求进行修改和插入操作时仍须保证该视图只有信息系的学生。

      create view IS_student

         as

         select Sno,Sname,Ssex,Sage

         from student

         where Sdept='IS'

         with check option;

      image.gif编辑

      3.建立信息系IS”选修了“1”号课程的学生视图

      create view IS_S1(Sno,Sname,Grade)

         as

         select student.Sno,Sname,Grade

         from student,sc

         where Sdept='IS'

                and student.Sno=sc.Sno

                and sc.Cno='1';

      image.gif编辑

      4. 建立信息系IS”选修了“1”号课程且成绩在90分以上的学生视图

      create view IS_S2

         as

         select Sno,Sname,Grade

         from is_s1

         where Grade>=90;

      image.gif编辑

      5. 定义一个反映学生出生年份的视图(提示:将年龄数值属性体现为“出生年份”

      create view BT_S(Sno,Sname,Sbirth)

         as

         select Sno,Sname,2021-Sage

         from student;

      image.gif编辑

      六、实验结果与分析(概括、分析与总结):

      上述结果中,部分题有多解法,这里只写了一种方法,运用到一些关键词update、delete等,以及创建视图create view……,其中还用了一些语句加以修饰,例如:with check option可以表示对视图进行更改等操作时要保证更新、插入或删除的行满足视图定义中的谓词条件;set foreign_key_checks=0可以在删除元组时关闭外键的介入进而删除元组,删除后在等于1即可;这些关键词等,可以轻松的解决题目。

      七、实验心得:

      本次实验,将本节的数据更新以及视图进行实践。通过实践,不仅可以加强对查询语句的记忆以及其他关键词的用法,使得mysql语句有了更深的记忆,其次对插入、删除或更新等关键词有了进一步的使用,还进而学习到了创建视图。对本次实验,收获颇多,对于今后的学习有了更好的理解和帮助。

      相关文章
      |
      3月前
      |
      存储 人工智能 NoSQL
      AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
      RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
      |
      6月前
      |
      存储 关系型数据库 数据库
      附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
      本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
      附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
      |
      4月前
      |
      存储 弹性计算 Cloud Native
      云原生数据库的演进与应用实践
      随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
      242 8
      |
      4月前
      |
      存储 弹性计算 安全
      现有数据库系统中应用加密技术的不同之处
      本文介绍了数据库加密技术的种类及其在不同应用场景下的安全防护能力,包括云盘加密、透明数据加密(TDE)和选择列加密。分析了数据库面临的安全威胁,如管理员攻击、网络监听、绕过数据库访问等,并通过能力矩阵对比了各类加密技术的安全防护范围、加密粒度、业务影响及性能损耗。帮助用户根据安全需求、业务改造成本和性能要求,选择合适的加密方案,保障数据存储与传输安全。
      |
      5月前
      |
      存储 人工智能 数据库
      视图是什么?为什么要用视图呢?数据库视图:定义、特点与应用
      本文三桥君深入探讨数据库视图的概念与应用,从定义特点到实际价值全面解析。视图作为虚拟表具备动态更新、简化查询、数据安全等优势,能实现多角度数据展示并保持数据库重构的灵活性。产品专家三桥君还分析了视图与基表关系、创建维护要点及性能影响,强调视图是提升数据库管理效率的重要工具。三桥君通过系统讲解,帮助读者掌握这一常被忽视却功能强大的数据库特性。
      1489 0
      |
      4月前
      |
      缓存 关系型数据库 BI
      使用MYSQL Report分析数据库性能(下)
      使用MYSQL Report分析数据库性能
      186 3
      |
      4月前
      |
      关系型数据库 MySQL 数据库
      自建数据库如何迁移至RDS MySQL实例
      数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
      |
      4月前
      |
      关系型数据库 MySQL 数据库
      阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
      阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
      907 152
      |
      4月前
      |
      关系型数据库 MySQL 分布式数据库
      阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
      阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。