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

简介: (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语句有了更深的记忆,其次对插入、删除或更新等关键词有了进一步的使用,还进而学习到了创建视图。对本次实验,收获颇多,对于今后的学习有了更好的理解和帮助。

      相关文章
      |
      2月前
      |
      存储 关系型数据库 数据库
      附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
      本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
      附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
      |
      3月前
      |
      安全 druid Nacos
      0 代码改造实现应用运行时数据库密码无损轮转
      本文探讨了敏感数据的安全风险及降低账密泄漏风险的策略。国家颁布的《网络安全二级等保2.0标准》强调了企业数据安全的重要性。文章介绍了Nacos作为配置中心在提升数据库访问安全性方面的应用,并结合阿里云KMS、Druid连接池和Spring Cloud Alibaba社区推出的数据源动态轮转方案。该方案实现了加密配置统一托管、帐密全托管、双层权限管控等功能,将帐密切换时间从数小时优化到一秒,显著提升了安全性和效率。未来,MSE Nacos和KMS将扩展至更多组件如NoSQL、MQ等,提供一站式安全服务,助力AI时代的应用安全。
      239 14
      |
      2月前
      |
      安全 Java Nacos
      0代码改动实现Spring应用数据库帐密自动轮转
      Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
      |
      1月前
      |
      存储 人工智能 数据库
      视图是什么?为什么要用视图呢?数据库视图:定义、特点与应用
      本文三桥君深入探讨数据库视图的概念与应用,从定义特点到实际价值全面解析。视图作为虚拟表具备动态更新、简化查询、数据安全等优势,能实现多角度数据展示并保持数据库重构的灵活性。产品专家三桥君还分析了视图与基表关系、创建维护要点及性能影响,强调视图是提升数据库管理效率的重要工具。三桥君通过系统讲解,帮助读者掌握这一常被忽视却功能强大的数据库特性。
      286 0
      |
      3月前
      |
      SQL 数据库
      软考软件评测师——数据库系统应用
      本文介绍了关系数据库的基础知识与应用,涵盖候选码定义、自然连接特点、实体间关系(如1:n和m:n)、属性分类(复合、多值与派生属性)以及数据库设计规范。同时详细解析了E-R图转换原则、范式应用(如4NF)及Armstrong公理体系。通过历年真题分析,结合具体场景(如银行信用卡额度、教学管理等),深入探讨了候选键求解、视图操作规范及SQL语句编写技巧。内容旨在帮助读者全面掌握关系数据库理论与实践技能。
      |
      3月前
      |
      人工智能 运维 关系型数据库
      数据库运维:mysql 数据库迁移方法-mysqldump
      本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
      592 1
      |
      4月前
      |
      负载均衡 算法 关系型数据库
      大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
      本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
      大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
      |
      3月前
      |
      SQL 关系型数据库 MySQL
      Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
      Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
      218 62
      |
      2月前
      |
      SQL 存储 关系型数据库
      MySQL功能模块探秘:数据库世界的奇妙之旅
      ]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!

      热门文章

      最新文章